1.#import "ViewController.h"@interface ViewController (){
NSArray *_province;
NSDictionary *_city;
NSDictionary *_country;
}
@end
2.数据
//省
_province = @[@"北京", @"广西", @"广东"];
//市
_city = @{
@"北京":@[@"朝阳区", @"东城区", @"西城区"],
@"广西":@[@"桂林市", @"南宁市"],
@"广东":@[@"惠州市", @"广州市", @"深圳市",@"东莞市"]
//县区
_country = @{
@"朝阳区":@[@"朝阳区1", @"朝阳区2", @"朝阳区3"],
@"东城区":@[@"东城区1", @"东城区2",@"东城区3",@"东城区4"],
@"西城区":@[@"西城区1", @"西城区2", @"西城区3",@"西城区4"],
@"桂林市":@[@"桂林市1", @"桂林市2", @"桂林市3"],
@"南宁市":@[@"南宁市1", @"南宁市2",@"南宁市3",@"南宁市4"],
@"惠州市":@[@"惠州市1", @"惠州市2", @"惠州市3",@"惠州市4"],
@"广州市":@[@"广州市1", @"广州市2", @"广州市3"],
@"深圳市":@[@"深圳市1", @"深圳市2",@"深圳市3",@"深圳市4"],
@"东莞市":@[@"东莞市1", @"东莞市2", @"东莞市3",@"东莞市4"],
};
3.绑定self.picker.dataSource = self;self.picker.delegate = self;
4.方法
#pragma mark - 该方法的返回值决定该控件包含多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
return 3;
}
#pragma mark - 该方法的返回值决定该控件指定列包含多少个列表项
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if (0 == component)
{
return _province.count;
}
if (1 == component) {
NSInteger rowProvince = [pickerView selectedRowInComponent:0];
NSString *provinceName = _province[rowProvince];
NSArray *citys = _city[provinceName];
return citys.count;
}else{
NSInteger rowProvince = [pickerView selectedRowInComponent:0];
NSString *provinceName = _province[rowProvince];
NSArray *citys = _city[provinceName];
NSInteger rowCity = [pickerView selectedRowInComponent:1];
NSString *cityName = citys[rowCity];
NSArray *country = _country[cityName];
return country.count;
}
}
#pragma mark - 该方法返回的NSString将作为UIPickerView中指定列和列表项的标题文本
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (0 == component) {
return _province[row];
}
if(1 == component){
NSInteger rowProvince = [pickerView selectedRowInComponent:0];
NSString *provinceName = _province[rowProvince];
NSArray *citys = _city[provinceName];
return citys[row];
}else{
NSInteger rowProvince = [pickerView selectedRowInComponent:0];
NSString *provinceName = _province[rowProvince];
NSArray *citys = _city[provinceName];
NSInteger rowCity = [pickerView selectedRowInComponent:1];
NSString *cityName = citys[rowCity];
NSArray *country = _country[cityName];
return country[row];
}
}
6.关联
#pragma mark - 当用户选中UIPickerViewDataSource中指定列和列表项时激发该方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if(0 == component){
[pickerView reloadComponent:1];
[pickerView reloadComponent:2];
}
if(1 == component)
[pickerView reloadComponent:2];
NSInteger rowOne = [pickerView selectedRowInComponent:0];
NSInteger rowTow = [pickerView selectedRowInComponent:1];
NSInteger rowThree = [pickerView selectedRowInComponent:2];
NSString *provinceName = _province[rowOne];
NSArray *citys = _city[provinceName];
NSString *cityName = citys[rowTow];
NSArray *countrys = _country[cityName];
NSLog(@"%@~%@~%@", _province[rowOne], citys[rowTow],countrys[rowThree]);
}