UIPickerView基本使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM