当前位置: 移动技术网 > 移动技术>移动开发>IOS > UIPickerView基本使用

UIPickerView基本使用

2019年05月03日  | 移动技术网移动技术  | 我要评论

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

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网