一、簡介
該文主要實現的是省市區的選擇,可在個人修改地址的地方使用。
二、需要的東西
制作這個首先需要一個area.plist文件,該文件中保存這所有的關於省市區的信息,下載地址:http://pan.baidu.com/s/1qWFPf8g。
三、制作原理
通過一個UIPickerView來顯示,將UIPickerView分成三部分,省、市、區。進而加載數據。
四、實現效果
圖片展示:
五、具體實現步驟:
1、首先,新建一個Single View APplication,然后在Storyboard中添加一個UIpicker View
,
2、實現UIPicker View的代理方法 --這里的數據是暫時的,還沒添加數據
#pragma mark - UIPickerViewDelegate /** *返回每一列的數據個數 */ -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if(component==1) { return 2; }else if (component==2) { return 3; }else { return 4; } } /** *返回pickerView分幾列,因為是省市區選擇,所以分3列 */ -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 3; } /** *觸發的事件 */ -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { NSLog(@"ss"); } /** *通過自定義view去顯示pickerView中的內容,這樣做的好處是可以自定義的調整pickerView中顯示內容的格式 */ -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *myView = nil; myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 30)]; myView.textAlignment = NSTextAlignmentCenter; myView.font = [UIFont systemFontOfSize:15]; //用label來設置字體大小 if (component==0) { myView.text = @"1"; }else if (component==1) { myView.text = @"2"; }else { myView.text = @"3"; } return myView; }
3、接下來就是把剛才下載的那個area.plist文件中的數據加入到picker View中
①、首先定義三個NSArray。
NSArray *provinceArr,*cityArr,*areaArr;
②、先設置provinceArr.cityArr,areaArr.
provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]]; cityArr = [[provinceArr objectAtIndex:0] objectForKey:@"cities"]; areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"];
默認的province列先顯示的第一列,此時剛好讓city顯示第一列的city,讓area顯示第一個city的area。
注:(此處這樣設置是因為這個area.plist文件的結構的原因,你可以自己看一下這個plist文件)。
4、此時數據便有了,但是當滾動第一列時,第二列和第三列都沒有變化,其實本質上就是在設置pickerView內容的代理方法中設置內容改變。重頭戲來了。--修改上面的這個代理方法。
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component==0) { //當是省的時候 cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"]; [pickerView selectRow:0 inComponent:1 animated:NO]; [self.areaPicker reloadComponent:1]; if ([cityArr count]!=0) { areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"]; [pickerView selectRow:0 inComponent:2 animated:NO]; [self.areaPicker reloadComponent:2]; } } else if (component==1) { areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"]; [pickerView selectRow:0 inComponent:2 animated:NO]; [self.areaPicker reloadComponent:2]; } } 注:不要忘了重新設置每一列的數據個數 if (component==0) { return [provinceArr count]; }else if(component==1) { return [cityArr count]; }else { return [areaArr count]; }
5、附加:
獲取三列的內容 province= [[provinceArr objectAtIndex:[self.areaPicker selectedRowInComponent:0]] objectForKey:@"state"]; //獲取province city= [[cityArr objectAtIndex:[self.areaPicker selectedRowInComponent:1]] objectForKey:@"city"]; if ([areaArr count]!=0) { area = [areaArr objectAtIndex:[self.areaPicker selectedRowInComponent:2]]; }
6、完成,附上源碼。(故事版上的設置大家自己設置就行了)

// // ViewController.m // ProvinceCityDownTownChoose // // Created by xiaoguizi on 15/2/9. // Copyright (c) 2015年 xiaoguizi. All rights reserved. // ------.m文件------ #import "ViewController.h" @interface ViewController () { NSArray *provinceArr,*cityArr,*areaArr; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; provinceArr = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]]; cityArr = [[provinceArr objectAtIndex:0] objectForKey:@"cities"]; areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"]; } #pragma mark - UIPickerViewDelegate /** *返回每一列的數據個數 */ -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component==0) { return [provinceArr count]; }else if(component==1) { return [cityArr count]; }else { return [areaArr count]; } } /** *返回pickerView分幾列,因為是省市區選擇,所以分3列 */ -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 3; } /** *觸發的事件 */ -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { if (component==0) { cityArr = [[provinceArr objectAtIndex:row] objectForKey:@"cities"]; [pickerView selectRow:0 inComponent:1 animated:NO]; [self.areaPicker reloadComponent:1]; if ([cityArr count]!=0) { areaArr = [[cityArr objectAtIndex:0] objectForKey:@"areas"]; [pickerView selectRow:0 inComponent:2 animated:NO]; [self.areaPicker reloadComponent:2]; } } else if (component==1) { areaArr = [[cityArr objectAtIndex:row] objectForKey:@"areas"]; [pickerView selectRow:0 inComponent:2 animated:NO]; [self.areaPicker reloadComponent:2]; } } /** *通過自定義view去顯示pickerView中的內容,這樣做的好處是可以自定義的調整pickerView中顯示內容的格式 */ -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *myView = nil; myView = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 30)]; myView.textAlignment = NSTextAlignmentCenter; myView.font = [UIFont systemFontOfSize:15]; //用label來設置字體大小 if (component==0) { myView.text =[[provinceArr objectAtIndex:row] objectForKey:@"state"]; }else if (component==1) { myView.text =[[cityArr objectAtIndex:row] objectForKey:@"city"]; }else { myView.text =[areaArr objectAtIndex:row]; } return myView; } @end ------.h文件------ // // ViewController.h // ProvinceCityDownTownChoose // // Created by xiaoguizi on 15/2/9. // Copyright (c) 2015年 xiaoguizi. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate> @property (weak, nonatomic) IBOutlet UIPickerView *areaPicker; @end