天天看点

IOS UIPickerView,日期和其他选择器UIPickerViewDataSource数据源协议UIPickerViewDelegate代理协议属性方法使用日期和其他选择器

文章目录

  • UIPickerViewDataSource数据源协议
  • UIPickerViewDelegate代理协议
  • 属性方法
  • 使用
  • 日期和其他选择器
    • #import

UIPickerViewDataSource数据源协议

UIPickerView中展示的数据项都是通过其数据源对象来实现的,UIPickerView的数据源对象需要遵守UIPickerViewDataSource数据源协议。在UIPickerViewDataSource数据源协议中定义了如下两个方法,这两个方法都是强制必须要实现的。

设置UIPickerView中所包含的列数,在UIPickerView中列被称为Component

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

设置UIPickerView中每个列Component所包含的行数,该方法中的参数component可以获取当前设置的列序号

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

UIPickerViewDelegate代理协议

在UIPickerViewDataSource数据源协议中,仅仅提供了UIPickerView包含了几列以及每一列的行数,而每一行展示的选项是通过UIPickerViewDelegate代理协议中的方法进行设置的。

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

为了获取用户当前选中的选项,在UIPickerViewDelegate中也提供了对应的方法,可以使我们获取到当前的选中项,以便做进一步的处理。

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

除此之外,UIPickerViewDelegate中还提供了一些用于定制UIPickerView选项外观的方法,例如,我们可以设置列宽、行宽等操作。

设置列宽

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

设置行宽

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
           

为指定行设置定制外观

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

属性方法

由于UIPickerView继承自UIView,因此UIPickerView的外观属性的定制可以使用UIView中的一些属性或方法。另外,在UIPickerView类中,还提供了一些特殊的属性以及方法,需要重点关注。

设置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;  
           

使用

//
//  ViewController.m
//  UIPickerView_base
//
//  Created by  on 2019/7/16.
//  Copyright © 2019 Shae. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource>
@property (nonatomic,strong)UIPickerView *pickerView;
@property (nonatomic,strong)NSArray *dataArray;
@property (nonatomic,strong)UILabel *label;
@end

@implementation ViewController
- (NSArray *)dataArray{
    if (_dataArray==nil) {
        [email protected][@"北京",@"天津",@"南京",@"上海",@"唐山",@"重庆"];
    }
    return _dataArray;
}
- (UIPickerView *)pickerView{
    if (_pickerView==nil) {
        _pickerView=[[UIPickerView alloc]initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 400)];
        _pickerView.layer.masksToBounds=YES;
        _pickerView.layer.borderWidth=1;
        _pickerView.dataSource=self;
        _pickerView.delegate=self;
    }
    return _pickerView;
}
- (UILabel *)label{
    if (_label==nil) {
        _label=[[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.pickerView.bounds)+100, [UIScreen mainScreen].bounds.size.width, 30)];
        _label.backgroundColor=[UIColor yellowColor];
        _label.textAlignment=NSTextAlignmentCenter;
        _label.text=self.dataArray[0];
    }
    return _label;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.pickerView];
    [self.view addSubview:self.label];
}
#pragma -mark data Data Source -
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
     return self.dataArray.count;
}
#pragma -mark delegate -
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return self.dataArray[row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    self.label.text=self.dataArray[row];
}
@end

           
IOS UIPickerView,日期和其他选择器UIPickerViewDataSource数据源协议UIPickerViewDelegate代理协议属性方法使用日期和其他选择器

代码:https://github.com/ShaeZhuJiu/UIPickerView_base.git

日期和其他选择器

第三方库以giihub最新为准

#import <PGDatePickManager.h>

# import <BRPickerView.h>

//选择用户类型
-(void)selectUserType{
    static NSString *resultStr;
    // 性别
        BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init];
        stringPickerView.pickerMode = BRStringPickerComponentSingle;
        stringPickerView.title = @"请选择用户类型";
        stringPickerView.dataSourceArr =[self.addUserMode.userTypeArray copy];
        stringPickerView.selectIndex = 0 ;
        stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) {
          
            NSLog(@"%s,%ld,%@",__func__,(long)resultModel.index,resultModel.value);//resultModel.index有bug不准确
            resultStr=resultModel.value;
            self.addUserMode.userType=resultStr;//数据在这里获取
            [self.addUserTableView reloadData];
        };
        [stringPickerView show];

}