用UIPickerView 做一个两列的城市选择器,选择第一列之后,更新第二列数据时为什么会崩溃。
#import "NWHometownPicker.h"
@interface NWHometownPicker () <UIPickerViewDataSource, UIPickerViewDelegate>
@end
@implementation NWHometownPicker
{
NSMutableArray *_hometownArray;
}
- (instancetype)init
{
self = [super init];
if (self) {
self.dataSource = self;
self.delegate = self;
_hometownArray = [self hometownArray];
}
return self;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
return [_hometownArray count];
} else {
NSInteger row = [pickerView selectedRowInComponent:0];
NSDictionary *dict = [_hometownArray objectAtIndex:row];
NSArray *city = [dict objectForKey:@"city"];
return [city count];
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return 100;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
if (component == 0) {
NSDictionary *dict = [_hometownArray objectAtIndex:row];
NSString *province = [dict objectForKey:@"province"];
UILabel *thisLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
thisLabel.text = province;
return thisLabel;
} else {
NSDictionary *dict = [_hometownArray objectAtIndex:[pickerView selectedRowInComponent:0]];
NSArray *city = [dict objectForKey:@"city"];
UILabel *thisLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
thisLabel.text = [city objectAtIndex:row];
return thisLabel;
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (component == 0) {
[pickerView reloadComponent:1];
[pickerView selectRow:0 inComponent:1 animated:NO];
}
NSDictionary *dict = [_hometownArray objectAtIndex:[pickerView selectedRowInComponent:0]];
NSString *province = [dict objectForKey:@"province"];
NSArray *city = [dict objectForKey:@"city"];
[self.hometownDelegate hometownPicker:self didSelectProvince:province city:[city objectAtIndex:[pickerView selectedRowInComponent:1]]];
}
#pragma mark
- (NSMutableArray *)hometownArray
{
NSArray *array = [NSArray arrayWithObjects:
@[@"北京"], @"北京",
@[@"天津"], @"天津",
@[@"上海"], @"上海",
@[@"重庆"], @"重庆",
@[@"福州市", @"厦门市", @"莆田市", @"三明市", @"泉州市", @"漳州市", @"南平市", @"龙岩市", @"宁德市"], @"福建",
@[@"石家庄市", @"唐山市", @"秦皇岛市", @"邯郸市", @"邢台市", @"保定市", @"张家口市", @"承德市", @"沧州市", @"廊坊市", @"衡水市"], @"河北",
@[@"太原市", @"大同市", @"阳泉市", @"长治市", @"晋城市", @"朔州市", @"晋中市", @"运城市", @"忻州市", @"临汾市", @"吕梁市"], @"山西",
@[@"呼和浩特市", @"包头市", @"乌海市", @"赤峰市", @"通辽市", @"鄂尔多斯市", @"呼伦贝尔市", @"巴彦淖尔市", @"乌兰察布市", @"兴安盟", @"锡林郭勒盟", @"阿拉善盟"], @"内蒙古",
@[@"沈阳市", @"大连市", @"鞍山市", @"抚顺市", @"本溪市", @"丹东市", @"锦州市", @"营口市", @"阜新市", @"辽阳市", @"盘锦市", @"铁岭市", @"朝阳市", @"葫芦岛市"], @"辽宁",
@[@"长春市", @"吉林市", @"四平市", @"辽源市", @"通化市", @"白山市", @"松原市", @"白城市", @"延边"], @"吉林",
@[@"哈尔滨市", @"齐齐哈尔市", @"鸡西市", @"鹤岗市", @"双鸭山市", @"大庆市", @"伊春市", @"佳木斯市", @"七台河市", @"牡丹江市", @"黑河市", @"绥化市", @"大兴安岭地区"], @"黑龙江",
@[@"南京市", @"无锡市", @"徐州市", @"常州市", @"苏州市", @"南通市", @"连云港市", @"淮安市", @"盐城市", @"扬州市", @"镇江市", @"泰州市", @"宿迁市"], @"江苏",
@[@"杭州市", @"宁波市", @"温州市", @"嘉兴市", @"湖州市", @"绍兴市", @"金华市", @"衢州市", @"舟山市", @"台州市", @"丽水市"], @"浙江",
@[@"合肥市", @"芜湖市", @"蚌埠市", @"淮南市", @"马鞍山市", @"淮北市", @"铜陵市", @"安庆市", @"黄山市", @"滁州市", @"阜阳市", @"宿州市", @"巢湖市", @"六安市", @"亳州市", @"池州市", @"宣城市"], @"安徽",
@[@"南昌市", @"景德镇市", @"萍乡市", @"九江市", @"新余市", @"鹰潭市", @"赣州市", @"吉安市", @"宜春市", @"抚州市", @"上饶市"], @"江西",
@[@"济南市", @"青岛市", @"淄博市", @"枣庄市", @"东营市", @"烟台市", @"潍坊市", @"济宁市", @"泰安市", @"威海市", @"日照市", @"莱芜市", @"临沂市", @"德州市", @"聊城市", @"滨州市", @"菏泽市"], @"山东",
@[@"郑州市", @"开封市", @"洛阳市", @"平顶山市", @"安阳市", @"鹤壁市", @"新乡市", @"焦作市", @"济源市", @"濮阳市", @"许昌市", @"漯河市", @"三门峡市", @"南阳市", @"商丘市", @"信阳市", @"周口市", @"驻马店市"], @"河南",
@[@"武汉市", @"黄石市", @"十堰市", @"宜昌市", @"襄樊市", @"鄂州市", @"荆门市", @"孝感市", @"荆州市", @"黄冈市", @"咸宁市", @"随州市", @"恩施",], @"湖北",
@[@"长沙市", @"株洲市", @"湘潭市", @"衡阳市", @"邵阳市", @"岳阳市", @"常德市", @"张家界市", @"益阳市", @"郴州市", @"永州市", @"怀化市", @"娄底市", @"湘西"], @"湖南",
@[@"广州市", @"韶关市", @"深圳市", @"珠海市", @"汕头市", @"佛山市", @"江门市", @"湛江市", @"茂名市", @"肇庆市", @"惠州市", @"梅州市", @"汕尾市", @"河源市", @"阳江市", @"清远市", @"东莞市", @"中山市", @"潮州市", @"揭阳市", @"云浮市"], @"广东",
@[@"南宁市", @"柳州市", @"桂林市", @"梧州市", @"北海市", @"防城港市", @"钦州市", @"贵港市", @"玉林市", @"百色市", @"贺州市", @"河池市", @"来宾市", @"崇左市"], @"广西",
@[@"成都市", @"自贡市", @"攀枝花市", @"泸州市", @"德阳市", @"绵阳市", @"广元市", @"遂宁市", @"内江市", @"乐山市", @"南充市", @"眉山市", @"宜宾市", @"广安市", @"达州市", @"雅安市", @"巴中市", @"资阳市", @"阿坝", @"甘孜", @"凉山"], @"四川",
@[@"贵阳市", @"六盘水市", @"遵义市", @"安顺市", @"铜仁地区", @"毕节", @"黔西南", @"黔东南", @"黔南"], @"贵州",
@[@"昆明市", @"曲靖市", @"玉溪市", @"保山市", @"昭通市", @"丽江市", @"思茅市", @"临沧市", @"楚雄", @"红河", @"文山", @"西双版纳", @"大理", @"德宏", @"迪庆"], @"云南",
@[@"西安市", @"铜川市", @"宝鸡市", @"咸阳市", @"渭南市", @"延安市", @"汉中市", @"榆林市", @"安康市", @"商洛市"], @"陕西",
@[@"兰州市", @"嘉峪关市", @"金昌市", @"白银市", @"天水市", @"武威市", @"张掖市", @"平凉市", @"酒泉市", @"庆阳市", @"定西市", @"陇南市", @"临夏", @"甘南"], @"甘肃",
@[@"西宁市", @"海东地区", @"海北", @"黄南", @"海南", @"果洛", @"玉树", @"海西"], @"青海",
@[@"银川市", @"石嘴山市", @"吴忠市", @"固原市", @"中卫市"], @"宁夏",
@[@"拉萨市", @"昌都地区", @"山南", @"日喀则", @"那曲", @"阿里", @"林芝"], @"西藏",
@[@"乌鲁木齐市", @"克拉玛依市", @"吐鲁番", @"哈密", @"昌吉", @"博尔塔拉", @"巴音郭楞", @"阿克苏", @"克孜勒苏", @"喀什", @"和田", @"伊犁", @"塔城", @"阿勒泰"], @"新疆",
@[@"海口市", @"三亚市", @"三沙市"], @"海南",
@[@"台北市", @"高雄市", @"基隆市", @"台中市", @"台南市", @"新竹市", @"嘉义市"], @"台湾",
@[@"香港"], @"香港",
@[@"澳门"], @"澳门",
nil];
NSMutableArray *result = [NSMutableArray new];
NSInteger i = 0;
while (i < [array count]) {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[array objectAtIndex:i], @"city",
[array objectAtIndex:i+1], @"province", nil];
[result addObject:dict];
i = i + 2;
}
return result;
}
@end
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。