首页 > 用UIPickerView 做一个两列的城市选择器,选择第一列之后,更新第二列数据时为什么会崩溃。

用UIPickerView 做一个两列的城市选择器,选择第一列之后,更新第二列数据时为什么会崩溃。

UIPickerView城市选择


前一段时间刚刚自己封装了一个,头文件里就是一个delegate,其他直接贴给你把

#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

【热门文章】
【热门文章】