`
wenxin2009
  • 浏览: 320505 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UIPickerView省份城市

    博客分类:
  • ios
 
阅读更多

以下为相关代码,仅供参考:

#import <UIKit/UIKit.h>
typedef void (^ReturnCityBlock)(NSString *string,int provinceIndex,int cityIndex);
@interface PickerBgView : UIView<UIPickerViewDelegate, UIPickerViewDataSource>
@property (weak, nonatomic) IBOutlet UIButton *doneBtn;
@property (weak, nonatomic) IBOutlet UIButton *closeBtn;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property (weak, nonatomic) IBOutlet UIView *clearView;
@property (nonatomic, copy)ReturnCityBlock returnBlock;

@property (nonatomic, assign)int cityIndex;//城市
@property (nonatomic, assign)int provinceIndex;//省份

- (id)initWithReturnBlock:(ReturnCityBlock)block;
- (void)showInView:(UIView *)view;
- (void)cancelPicker;
@end

 

#import "PickerBgView.h"

@implementation PickerBgView{
    NSArray *provinces, *cities;
    NSString *_state;
    NSString *_city;
    
}

- (id)initWithReturnBlock:(ReturnCityBlock)block{
    self = [[[NSBundle mainBundle] loadNibNamed:@"PickerBgView" owner:self options:nil] objectAtIndex:0];
    if (self) {
        self.pickerView.delegate = self;
        self.pickerView.dataSource = self;
        provinces = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"city.plist" ofType:nil]];
        [self.closeBtn addTarget:self action:@selector(cancelPickerViewAction:) forControlEvents:UIControlEventTouchUpInside];
        self.returnBlock = block;
        UITapGestureRecognizer *closeTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cancelGestureAction)];
        [self.clearView addGestureRecognizer:closeTap];
        [self.doneBtn addTarget:self action:@selector(doneBtnAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}
#pragma mark - PickerView lifecycle

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch (component) {
        case 0:
            return [provinces count];
            break;
        case 1:
            return [cities count];
            break;
        default:
            return 0;
            break;
    }
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == 0) {
        return [[provinces objectAtIndex:row] objectForKey:@"state"];
    }else{
        return [cities objectAtIndex:row];
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    switch (component) {
        case 0:
            _cityIndex = 0;
            cities = [[provinces objectAtIndex:row] objectForKey:@"cities"];
            [self.pickerView selectRow:_cityIndex inComponent:1 animated:YES];
            [self.pickerView reloadComponent:1];
            _state = [[provinces objectAtIndex:row] objectForKey:@"state"];
            _city = [cities objectAtIndex:_cityIndex];
            _provinceIndex = (int)row;
            break;
        case 1:
            _city = [cities objectAtIndex:row];
            _cityIndex = (int)row;
            break;
        default:
            break;
    }
   }
- (void)doneBtnAction{
    self.returnBlock([NSString stringWithFormat:@"%@%@",_state,_city],_provinceIndex,_cityIndex);
    [self cancelPicker];
}

#pragma mark - animation

- (void)showInView:(UIView *) view
{
    self.frame = CGRectMake(0, ScreenHeight, ScreenWidth, ScreenHeight);
    //默认已选中省份城市
    cities = [[provinces objectAtIndex:_provinceIndex] objectForKey:@"cities"];
    _state = [[provinces objectAtIndex:_provinceIndex] objectForKey:@"state"];
    _city = [cities objectAtIndex:_cityIndex];
    [self.pickerView selectRow:_provinceIndex inComponent:0 animated:YES];
    [self.pickerView selectRow:_cityIndex inComponent:1 animated:YES];
    [self.pickerView reloadAllComponents];
    
    [view addSubview:self];
    
    [UIView animateWithDuration:0.3 animations:^{
        self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight);
    }];
}

- (void)cancelPicker
{
    [UIView animateWithDuration:0.3
                     animations:^{
                         self.frame = CGRectMake(0, self.frame.origin.y+self.frame.size.height, self.frame.size.width, self.frame.size.height);
                     }
                     completion:^(BOOL finished){
                         [self removeFromSuperview];
                         
                     }];
}

- (void)cancelGestureAction
{
    [self cancelPicker];
}
#pragma mark - cancel和ok
-(void)cancelPickerViewAction:(UIButton *)sender
{
    [self cancelPicker];
    
}
@end

 

分享到:
评论

相关推荐

    UIPickerView 城市两级选择

    然后,当用户在第一级选择省份时,第二级的`UIPickerView`会自动更新为对应省份的城市。 自定义封装`CityPickerView`的过程包括以下步骤: 1. 创建一个新的UIView子类,如`CityPickerView`,并添加两个`...

    省份城市联动Demo

    在iOS开发中,UIPickerView 是一个常用的组件,用于展示一系列可滚动的选择项,比如日期选择、时间选择或者像省份城市联动这样的分类选择。在这个"省份城市联动Demo"项目中,我们将深入探讨如何利用UIPickerView来...

    ios UIPickerView封装的中国省/市/区地址选择器 ,含有中国最新城市plist文件

    在这个场景下,`plist`文件很可能包含了中国所有省份、城市和区县的层次结构数据。每个省下面有对应的市,每个市下面有对应的区县,这种结构使得数据易于管理和检索。开发者通常会使用`NSDictionary`或者`NSArray`来...

    iOS开发之UIPickerView实现城市选择器的步骤详解

    在本教程中,我们将详细讲解如何使用UIPickerView 实现一个城市选择器,该选择器分为两列,第一列显示省份,第二列显示对应省份的城市。我们将数据存储在一个名为“cityData”的plist文件中。 首先,我们需要了解...

    UIPickerView-Province-city:UIPickerView的简单应用——省份城市选择的实现

    UIPickerView-Province-cityUIPickerView的简单应用——省份/城市选择的实现实现效果如图,左边为省份选择,右边选择省份对应的城市数据plist形式如图UIPickerView的实现重要还是代理方法的实现

    UIPickerView的使用(实现省市县)

    例如,你可以创建一个嵌套字典,键为省份,值为包含城市字典的数组,城市字典的键为城市,值为包含县数组的字典。 5. **实现选择逻辑** 当用户滚动 `UIPickerView` 时,你可以根据当前选择的省、市、县更新对应的...

    UIPickerView三级联动

    首先,你需要准备完整的全国省份、城市和区县的数据。这些数据可以存储在数组中,或者通过网络API动态获取。每个数据项通常包含id和name,例如: ```swift struct Area { let id: String let name: String } ``` ...

    省份和城市联动Demo

    4. **联动效果**:当用户在第一列(省份)选择一项时,通过调用UIPickerView的reloadComponent(:)方法刷新第二列(城市),并根据省份选择更新城市列表。这需要在代理方法pickerView(_:didSelectRow:inComponent:)中...

    ios UIPickerView 中国省市区选择器

    在给定的标题“ios UIPickerView 中国省市区选择器”中,我们可以推断出这个项目是关于如何使用`UIPickerView` 创建一个能够帮助用户选择中国省份、城市、区县的组件。这种选择器在本地化应用或者地址输入场景中非常...

    swift-一个四列的UIPickerView可以滑动选择精确到街道的中国行政区划信息并返回地址使用简单

    这个模型可能包含省份、城市、区县和街道级别的数据,并且已经组织成易于查询和操作的结构。 3. **数据绑定**:控件需要与数据模型进行交互,以便当用户滚动时更新显示的信息。Swift中,这可以通过代理方法实现,如...

    两个UIPickerView控件间的数据依赖

    例如,第一个PickerView选择省份,第二个PickerView则显示对应省份的城市。这种情况下,你需要在DataSource的`pickerView(_:titleForRow:)`方法中动态更新第二个PickerView的选项。 2. **层级数据**:如果数据结构...

    ios 使用UIPickerView时省市区全文件 .plist

    在这个场景中,标题提到的"ios 使用UIPickerView时省市区全文件 .plist"表明我们正在处理一个与UIPickerView相关的数据结构,该结构以.plist(Property List)格式存储,主要用于展示中国各省份、城市和区县的全量...

    ios-省市区选择器(UIPickerView).zip

    在这个“ios-省市区选择器(UIPickerView)”项目中,开发者创建了一个自定义的PickerView,专门用于选择中国的省份、城市和区县。这个组件对于需要用户输入地址信息的应用来说非常实用。 首先,UIPickerView的基本...

    iphone全国省市城市数据库源码(例子)

    这个源码库通常用于实现用户在应用中选择省份、城市的功能,例如地址输入或者地理位置筛选。 描述中提到的“sqlite3,UIPickerView”是iOS开发中的两个关键组件。sqlite3是苹果官方支持的轻量级关系型数据库,用于...

    CityPicker:UIPickerView的用法之二:二级下拉联动

    本篇文章将深入探讨`CityPicker`,它是`UIPickerView`的一个具体应用,实现了二级下拉联动的效果,常见于城市选择场景,如省份与城市的选择。在这个功能中,用户先选择省份,然后根据所选省份加载相应的城市列表。...

    iOS程序选择器

    在这种模式下,你可以创建一个CityViewModel,它包含省份和城市的列表,并提供选取省份后的城市更新逻辑。ViewModel与View(此处为UIPickerView)通过KVO(Key-Value Observing)或者Swift的 Combine 框架进行数据...

    省份滚轮代码

    在iOS应用开发中,UIPickerView可以用来创建滚动列表,如国家、省份或城市的选择。它允许用户通过滚动视图来选取一个或多个值。以下是一些关于如何使用UIPickerView实现“省份滚轮代码”的关键知识点: 1. **...

    iOS(Swift)——三级列表城市选择器(可以是N级列表)

    本篇将深入探讨如何使用Swift和UIPickerView构建一个三级(甚至更多级)的城市选择器。 首先,我们需要了解UIPickerView的基本概念。UIPickerView是iOS中的一个滚动选择视图,用户可以通过滚动选取列表中的某一值。...

    sqlite+uipickview 完成中国城市选择

    在这种场景下,SQLite数据库可以用来存储大量的城市数据,而UIPickerView则作为一个理想的用户界面元素,允许用户滚动浏览并选择城市。下面将详细阐述如何结合SQLite和UIPickerView实现中国城市的选择功能。 首先,...

Global site tag (gtag.js) - Google Analytics