iOS UIPickerView和UIDatePicker控件

1. UIPickerView控件

UIPickerView是一个列表控件,通过代理(UIPickerViewDelegate)和数据源(UIPickerViewDataSource)来进行设置。

主要方法

// 刷新所有列
- (void)reloadAllComponents;
// 刷新指定列
- (void)reloadComponent:(NSInteger)component;
// 选择指定列中的指定行
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;

UIPickerViewDelegate指定列的高度和宽度,返回每行的标题或者控件

// 指定列的高度和宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;

// 返回每行的标题或者控件
- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
	forComponent:(NSInteger)component;
- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row
	forComponent:(NSInteger)component;
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
	forComponent:(NSInteger)component reusingView:(nullable UIView *)view;

// 选择行数
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row 
	inComponent:(NSInteger)component;

UIPickerViewDataSource指定显示的列数和每列包含的行数,主要需要覆盖两个方法

// 指定显示的列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// 指定每列包含的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

指定两列,第一列是省份,第二列是对应的城市名。选择省份后,城市名会对应修改。
示例代码,

- (void)viewDidLoad {
    [super viewDidLoad];

    self.cityArray = @[@{
                           @"province" : @"江苏",
                           @"city" : @[@"南京市", @"无锡市", @"徐州市", @"常州市", @"苏州市", @"南通市",
                                       @"连云港市", @"淮安市", @"盐城市", @"扬州市", @"镇江市", @"泰州市", @"宿迁市"]
                    }, @{
                           @"province" : @"浙江",
                           @"city" : @[@"杭州", @"宁波", @"温州", @"绍兴", @"湖州",
                                       @"嘉兴", @"金华", @"衢州", @"台州", @"丽水", @"舟山"]
                    }];
    
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    UIPickerView *pickView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 100, width, 200)];
    pickView.delegate = self;
    pickView.dataSource = self;
    
    self.selectProvince = 0;
    self.selectCity = 0;
    
    [self.view addSubview: pickView];
}

#pragma mark - UIPickerViewDataSource -
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {
        return self.cityArray.count;
    } else {
        NSArray *city = self.cityArray[self.selectProvince][@"city"];
        return city.count;
    }
}

#pragma mark - UIPickerViewDelegate -
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (component == 0) {
        return self.cityArray[row][@"province"];
    } else {
        NSArray *city = self.cityArray[self.selectProvince][@"city"];
        return city[row];
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    if (component == 0) {
        self.selectProvince = row;
        // 选中省份后,刷新城市列表,选中第一行
        self.selectCity = 0;
        [pickerView reloadComponent:1];
        [pickerView selectRow:0 inComponent:1 animated:YES];
    } else if (component == 1) {
        self.selectCity = row;
    }
    NSLog(@"selectProvince = %@ selectCity = %@", self.cityArray[self.selectProvince][@"province"],
            self.cityArray[self.selectProvince][@"city"][self.selectCity]);
}

显示如下
在这里插入图片描述

2. UIDatePicker控件

UIDatePicker用来显示日期。按datePickerMode属性可以分为四种

typedef NS_ENUM(NSInteger, UIDatePickerMode) {
    UIDatePickerModeTime, // 时间模式
    UIDatePickerModeDate, // 日期模式
    UIDatePickerModeDateAndTime, // 日期和时间模式
    UIDatePickerModeCountDownTimer, // 计时模式
}

preferredDatePickerStyle属性可以分为三种,

typedef NS_ENUM(NSInteger, UIDatePickerStyle) {
    UIDatePickerStyleAutomatic, // 自动选择下面三种模式中一种
    UIDatePickerStyleWheels, // 滚轮模式
    UIDatePickerStyleCompact, // 袖珍模式
    UIDatePickerStyleInline, // 内联模式
}

袖珍模式(UIDatePickerStyleCompact)只显示,点击后弹出修改界面。

// 当前日期(除计时模式)
@property (nonatomic, strong) NSDate *date;
// 最小日期(除计时模式)
@property (nullable, nonatomic, strong) NSDate *minimumDate;
// 最大日期(除计时模式)
@property (nullable, nonatomic, strong) NSDate *maximumDate;

// 当前时间,除以60后(计时模式)
@property (nonatomic) NSTimeInterval countDownDuration;
// 分钟间隔,默认是1(计时模式)
@property (nonatomic) NSInteger minuteInterval;

计时模式只有滚轮模式。minuteInterval设置为15,countDownDuration设置为3600。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值