UIPickerView元件的使用之 省市聯動

2021-08-27 22:36:09 字數 3466 閱讀 7633

第一步:選擇iphone的螢幕

注意:在選擇螢幕後如果工程在別的地方開啟需要重新選擇對應的螢幕 也就是與之對應的size class,否則的話是不會顯示元件的。

第二步:建立約束,進行螢幕適配。

第三步:設定pickerview的資料來源和**物件為當前的控制器。

第四步:讓pickerview所在的控制器遵循對應的**協議。並實現對應的資料來源和**方法。

第五步:新建或建好資源檔案拖進去。

執行效果如下:

關於資料來源和協議方法可以直接點進去拷貝。

在實現省市聯動功能時需要注意的兩點如下:

(一)設定選中省份的索引為全域性變數。以便重新整理第二列對應的城市時使用。

(二)在選中行的**方法中不管第二列之前選中第幾行,在重新整理資料後都重新顯示第一行。

具體工程如下:

建立與plist檔案對應的model類province

province.h

//

// province.h

// 03.省市聯動

//// created by 劉劉勛 on 16/1/3.

//#import #import @inte***ce province : nsobject

@property(nonatomic, copy)nsstring *name;

@property(nonatomic, strong)nsarray *cities;

-(instancetype)initwithdic:(nsdictionary *)dic;

+(instancetype)provincewithdic:(nsdictionary *)dic;

+(nsarray *)provincelist;

@end

province.m

//

// province.m

// 03.省市聯動

//// created by 劉劉勛 on 16/1/3.

//#import "province.h"

@implementation province

-(instancetype)initwithdic:(nsdictionary *)dic

return self;

}+(instancetype)provincewithdic:(nsdictionary *)dic

+(nsarray *)provincelist

return provincem;

}@end

viewcontroller.m

//

// viewcontroller.m

// 03.省市聯動

//// created by 劉劉勛 on 16/1/3.

//#import "viewcontroller.h"

#import "province.h"

@inte***ce viewcontroller ()@property(nonatomic, strong)nsarray *provinces;

@property(nonatomic, assign)nsinteger indexofprovince; //當前預設選中的省份

@end

@implementation viewcontroller

-(nsarray *)provinces

return _provinces;

}- (void)viewdidload

// returns the number of 'columns' to display.

- (nsinteger)numberofcomponentsinpickerview:(uipickerview *)pickerview

// returns the # of rows in each component..

- (nsinteger)pickerview:(uipickerview *)pickerview numberofrowsincomponent:(nsinteger)component

// 獲取對應省份的城市個數

province *province = self.provinces[self.indexofprovince];

return province.cities.count;

}#pragma mark - 顯示資料

-(nsstring *)pickerview:(uipickerview *)pickerview titleforrow:(nsinteger)row forcomponent:(nsinteger)component

// 獲取選中的城市,顯示城市的名稱

province *selectedprovince = self.provinces[self.indexofprovince];

return selectedprovince.cities[row];

}//-(uiview *)pickerview:(uipickerview *)pickerview viewforrow:(nsinteger)row forcomponent:(nsinteger)component reusingview:(uiview *)view

////

// if (component == 0) else

//

// return label;

//}#pragma mark - 選中行

-(void)pickerview:(uipickerview *)pickerview didselectrow:(nsinteger)row incomponent:(nsinteger)component

}#pragma mark 設定每一列的寬度

-(cgfloat)pickerview:(uipickerview *)pickerview widthforcomponent:(nsinteger)component

return 200;

}@end

UIPickerView元件的使用之 省市聯動

第一步 選擇iphone的螢幕 注意 在選擇螢幕後如果工程在別的地方開啟需要重新選擇對應的螢幕 也就是與之對應的size class,否則的話是不會顯示元件的。第二步 建立約束,進行螢幕適配。第三步 設定pickerview的資料來源和 物件為當前的控制器。第四步 讓pickerview所在的控制器...

UIPickerView的使用 二

上篇文章 uipickerview的使用 一 學習了如何建立單列選擇器,現在看一下如何建立多列選擇器 多列選擇器 以二列為例 uipickerviewdatasource中定義的方法,該方法的返回值決定該控制項包含的列數 nsinteger numberofcomponentsinpickervie...

UIPickerView的使用 三

前兩篇文章 uipickerview的使用 一 uipickerview的使用 二 學習了uipickerview的單列選擇器和雙列選擇器的使用。現在我們一起學習相互依賴的多列選擇器 uipickerviewdatasource中定義的方法,該方法的返回值決定該控制項包含的列數 nsinteger ...