先介绍一下我们要实现什么功能。有1个选择器,有左右两个轮子,做轮子选择省份,右轮子选择城市,其中选择省份时,右边的城市会自动更新。
1、首先,对UIPickerView绑定Delegate和DataSource到相应的ViewController。此处不再赘述。可以用代码或者Interface界面设置。
2、首先实现数据的初始化。
(1)在.h文件中定义如下变量。其中provinces_cities.plist请见附件。
@interface IkrboyViewController : UIViewController{ NSDictionary *dict;//用于存储省份-城市的数据 NSArray *provinceArray;//省份的数组 NSArray *cityArray;//城市的数组,在接下来的代码中会有根据省份的选择进行数据更新的操作 }
(2)在.m的viewDidLoad方法中加上初始化数据的处理。具体处理在initPicker方法
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self initPicker]; } //初始化PickerView使用的数据源 -(void)initPicker{ NSBundle *bundle = [NSBundle mainBundle]; NSString *plistPath = [bundle pathForResource:@"provinces_cities" ofType:@"plist"]; dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; provinceArray = [dict allKeys]; NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0]; NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex]; cityArray = [dict objectForKey:seletedProvince]; NSLog(@"%d",[provinceArray count]); }
3、将数据绑定到UIPickerView
//以下3个方法实现PickerView的数据初始化 //确定picker的轮子个数 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 2; } //确定picker的每个轮子的item数 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) {//省份个数 return [provinceArray count]; } else {//市的个数 return [cityArray count]; } } //确定每个轮子的每一项显示什么内容 #pragma mark 实现协议UIPickerViewDelegate方法 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) {//选择省份名 return [provinceArray objectAtIndex:row]; } else {//选择市名 return [cityArray objectAtIndex:row]; } }
4.随时监听UIPickerView的滚动。
//监听轮子的移动 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component == 0) { NSString *seletedProvince = [provinceArray objectAtIndex:row]; cityArray = [dict objectForKey:seletedProvince]; //重点!更新第二个轮子的数据 [self.pickerView reloadComponent:1]; NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1]; NSString *seletedCity = [cityArray objectAtIndex:selectedCityIndex]; NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity]; NSLog(@"%@",msg); } else { NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0]; NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex]; NSString *seletedCity = [cityArray objectAtIndex:row]; NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity]; NSLog(@"%@",msg); } }
附加说明:利用下面的代码,获得UIPickerView的不同Component(滚轮)的选中的index。
NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0]; NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1];
相关推荐
简单的省市区选择器 使用UIpickerView完成 欢迎各位童鞋学习使用 本代码是使用的本地plist的省市区文件完成的。 如果遇到需要省市区全在网络获取 而不会写的可以联系我 (因为我在项目中省市区就是网络获取的,京东...
iOS 年月份选择器 UIDatePicker UIPickerView
UIPikerView时间选择器,自定义控件,选中颜色变化,取消和确定选中时间。开始进入选择器选中时间等操作!代理方法和控件代理及可实现
ios应用源码之在uipickerview 选择时,uitableviewcell自动填充值
以前在网上下了个时间选择器Demo,由于封装成UIActionSheet类型,而ios8弃用了UIActionSheet和UIAlertView,不得不对代码进行修改。将封装的UIActionSheet改为UIView,为了多态初始化时添加了枚举(几个时间选择器...
简单的使用uiscrollview代替uipickerview时间选择器
IOS应用源码之在UIPickerView 选择时,UITableViewCell自动填充值.zip
IOS应用源码之在UIPickerView 选择时,UITableViewCell自动填充数值 .rar
本文借助于UIPickerView来实现城市选择器,第一列为省份,第二列为第一列省份对应的城市或者区,数据放在plist中,plist结构如下图所示,第一层是一个Dictionary,每个省份对应的城市是一个Array: 实现步骤 第一...
IOS应用源码——UIPickerView选择多个选项效果.zip
IOS应用源码——在UIPickerView 选择时,UITableViewCell自动填充值.zip
IOS应用源码——在UIPickerView 选择时,UITableViewCell自动填充值.rar
ios应用源码之自定义风格uipickerview .
利用ios UIPickerView 封装的一个选择器类,可以实现选择中国地省市县区等!
ios UIPickerView封装的中国省/市/区地址选择器 ,含有中国最新城市plist文件
IOS自定义弹出UIPickerView或UIDatePicker(动画效果)
ActionSheetPicker = UIPickerView + UIActionSheet
IOS应用源码之自定义风格UIPickerView.zip