ios--- UIpickerView 省市区三级联动

/*********************************三级联动 ********************************/

/** 三级城市选择 */

@property (nonatomic,strong) UIPickerView *cityPickerView;

/** 记录选中的省 */

@property (nonatomic,assign) NSInteger proIndex;

@property (nonatomic,strong) NSMutableArray<ProvinceModel *> *provinceModelArr;

@property (nonatomic,strong) NSMutableArray<areaModel*> *areaModelArr;

设置数据源和代理 UIPickerViewDataSource,UIPickerViewDelegate

#pragma mark - 三级联动

-(void)setUpSelectCityUI{


    self.cityPickerView =[[UIPickerViewalloc]init];

    self.cityPickerView.backgroundColor =[UIColorwhiteColor];

    //显示选中框

    self.cityPickerView.showsSelectionIndicator=YES;

    self.cityPickerView.dataSource =self;

    self.cityPickerView.delegate =self;


    self.quyuText.inputView =self.cityPickerView;


}

#pragma mark - pickerView 列数

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView {

    return 3;

}

#pragma mark - pickerView 每列个数

- (NSInteger)pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component {


            if (component == 0) {


                // 省会

                return self.provinceModelArr.count;


            }


            if (component == 1) {

                // 选中的省会的城市

                ProvinceModel *province =self.provinceModelArr[_proIndex];

                return province.city.count;

            }

            else{


                // 区域

                ProvinceModel *province =self.provinceModelArr[_proIndex];

                NSInteger cityIndex = [pickerViewselectedRowInComponent:1];

                self.areaModelArr = [areaModelmj_objectArrayWithKeyValuesArray:province.city[cityIndex][@"area"]];


                return self.areaModelArr.count;


            }



}

#pragma mark - pickerView 每列宽度

- (CGFloat)pickerView:(UIPickerView*)pickerView widthForComponent:(NSInteger)component {


    return Kwidth/3;


}

#pragma mark - pickerView 滚动UIPickerView就会调用  返回选中的行

- (void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

{

    if (component == 0) { // 滚动省会,刷新城市(1列)

        // 记录当前选中的省会

        _proIndex = [pickerView selectedRowInComponent:0];

        [pickerView reloadAllComponents];

    }


    if (component == 1) {



       [pickerView reloadAllComponents];

    }


       // 获取选中省会

        ProvinceModel *province =self.provinceModelArr[_proIndex];

        NSLog(@"省-- %@,province_id-- %@ ",province.shortname,province.province_id);


        NSInteger cityIndex = [pickerView selectedRowInComponent:1];

        NSLog(@" cityIndex %ld ",cityIndex);

        NSString *cityName = [province.city[cityIndex]objectForKey:@"shortname"];

        NSString *city_id  = [province.city[cityIndex]objectForKey:@"city_id"];

        NSLog(@"city_id---%@ cityName--- %@ ",city_id,cityName);


        NSInteger areaIndex = [pickerView selectedRowInComponent:2];

        NSLog(@" areaIndex %ld ",areaIndex);

        self.areaModelArr = [areaModelmj_objectArrayWithKeyValuesArray:province.city[cityIndex][@"area"]];

        areaModel *area=self.areaModelArr[areaIndex];

        NSLog(@"区ID---%@  区---%@ ",area.area_id, area.shortname);



        if([province.shortnameisEqualToString:cityName]){

            self.quyuText.text = [NSStringstringWithFormat:@"%@ %@",cityName,area.shortname];


        }else{


           self.quyuText.text = [NSStringstringWithFormat:@"%@ %@ %@",province.shortname,cityName,area.shortname];


        }



}

#pragma mark - pickerView 返回当前行的内容,此处是将数组中数值添加到pivkerView显示栏上

-(NSString*)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{

        // 描述省会

        if (component == 0) {

            // 获取省会

            ProvinceModel *p =self.provinceModelArr[row];

            return p.shortname;

        }


    // 描述市

    if (component == 1) {

        // 获取选中省会

        ProvinceModel *province =self.provinceModelArr[_proIndex];

        return [province.city[row]objectForKey:@"shortname"];

    }

        else{

            ProvinceModel *province =self.provinceModelArr[_proIndex];

            NSInteger cityIndex = [pickerView selectedRowInComponent:1];

            self.areaModelArr = [areaModelmj_objectArrayWithKeyValuesArray:province.city[cityIndex][@"area"]];

            areaModel *area=self.areaModelArr[row];

            return area.shortname;

        }



}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    UILabel* pickerLabel = (UILabel*)view;

    if (!pickerLabel){

        pickerLabel = [[UILabel alloc] init];

        [pickerLabel setBackgroundColor:[UIColor clearColor]];

        [pickerLabel setFont:[UIFont boldSystemFontOfSize:12]];

pickerLabel.textAlignment = NSTextAlignmentCenter;

        pickerLabel.adjustsFontSizeToFitWidth = YES; 


    }

    // Fill the label text here

    pickerLabel.text=[self pickerView:pickerView titleForRow:row forComponent:component];

    return pickerLabel;

}


// 给城市文本框赋值

        [selfpickerView:self.cityPickerViewdidSelectRow:0inComponent:0];

---------------------

作者:西半球

来源:CSDN

原文:https://blog.csdn.net/iotjin/article/details/80179809

版权声明:本文为博主原创文章,转载请附上博文链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 学习阶段五(update:2013-3-28 0:38):实现功能:为减少工作量,仅抓取所有tag页下前3页电影信...
    瓦力求索阅读 328评论 0 3
  • 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索...
    Eenmaal_7a01阅读 248评论 0 0
  • //swift后面没有分号。。加分号不会报错。。但是规定不能加分号 //引入框没有分号 直接写就OK //swi...
    光_遥远阅读 587评论 0 0
  • 爷爷病重去世,爸妈吵架闹离婚,已实习公司迟迟不给录用回复,此为背景(感觉被全世界抛弃了) 2017.10.17 第...
    必雨轩阅读 259评论 0 0
  • 圣诞节的时候,跟多年的男闺蜜聊天说还没吃饭,然后他大半夜地点了外送黄焖鸡,吃完,室友默默地把这本书塞到我怀里,郑重...
    清洺阅读 240评论 0 0