UIPickerView是很常用的一個UI控制項,在各種購物平臺選擇地址時候都是必備的,下麵我們來說一下具體的使用 首先UIPickerView的創建,與多數控制項一樣,分配記憶體並設置位置尺寸。 重要的的是代理與數據源,設置代理和數據源後服從代理和數據源協議 其中數據源裡面有兩個必須實現的方法 UIPi ...
UIPickerView是很常用的一個UI控制項,在各種購物平臺選擇地址時候都是必備的,下麵我們來說一下具體的使用
首先UIPickerView的創建,與多數控制項一樣,分配記憶體並設置位置尺寸。
重要的的是代理與數據源,設置代理和數據源後服從代理和數據源協議
<UIPickerViewDelegate,UIPickerViewDataSource>
其中數據源裡面有兩個必須實現的方法
//設置列數 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return count; } //設置指定列包含的項數 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
}
UIPickerView是可以只設置單列的,列被稱為component,此時返回的列數為1即可,單更多時候需要的是多列情況,此時設置返回值為自己所需要的列數即可。
在UIPickerViewDataSource數據源協議中,僅僅提供了UIPickerView包含幾列以及每一列的項數,而每一行展示的選項是通過UIPickerViewDelegate協議中的方法來設置的。
//設置每個選項顯示的內容 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ } //獲取用戶當前選中的選項 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ }
UIPickerView基本屬性和方法:
設置數據源對象以及代理對象
@property(nullable,nonatomic,weak) id<UIPickerViewDataSource> dataSource; @property(nullable,nonatomic,weak) id<UIPickerViewDelegate> delegate;
重新載入列:
- (void)reloadAllComponents; - (void)reloadComponent:(NSInteger)component;
獲取當前選中的選項序號:
- (NSInteger)selectedRowInComponent:(NSInteger)component;
指定選中的項顯示在中間位置,一般設置第一項放在中間:
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
下麵是一個簡單的完整示例:
#import "ViewController.h" @interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource> @property(nonatomic,strong)UIPickerView *pickerVIew; @property(nonatomic,strong)NSDictionary *dictionary; @property(nonatomic,strong)NSArray *provinceArray; @property(nonatomic,copy)NSString *selectedProvince; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.dictionary = @{@"江蘇":@[@"南京",@"徐州",@"鎮江",@"無錫",@"常州"],@"河北":@[@"石家莊",@"保定",@"承德",@"滄州",@"秦皇島"]}; //獲取字典中所有的省份併排序保存 self.provinceArray = [[self.dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; self.selectedProvince = self.provinceArray[0]; [self.view addSubview:self.pickerVIew]; } //懶載入 - (UIPickerView *)pickerVIew{ if (_pickerVIew == nil) { self.pickerVIew = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 400)]; _pickerVIew.layer.masksToBounds = YES; _pickerVIew.layer.borderWidth = 1; _pickerVIew.delegate = self; _pickerVIew.dataSource = self; } return _pickerVIew; } #pragma mark ------- dateSource&&Delegate -------- //設置列數 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 2; } //設置指定列包含的項數 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ if (component == 0) { return self.provinceArray.count; } return [self.dictionary[self.selectedProvince] count]; } //設置每個選項顯示的內容 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ if (component == 0) { return self.provinceArray[row]; } return [self.dictionary[self.selectedProvince] objectAtIndex:row]; } //用戶進行選擇 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ if (component == 0) { self.selectedProvince = self.provinceArray[row]; [self.pickerVIew reloadComponent:1]; //設置第二列首選的始終是第一個 [self.pickerVIew selectRow:0 inComponent:1 animated:YES]; } } @end