博客
关于我
iOS UIPickerView和UIDatePicker控件
阅读量:567 次
发布时间:2019-03-11

本文共 3429 字,大约阅读时间需要 11 分钟。

UIPickerView控件

UIPickerView是一个功能强大的组件,通过代理和数据源的方式来实现功能。这类组件广泛用于选择器功能,如选择省份、城市等。

主要方法

UIPickerView提供了多种方法来操作和定制选择器。

  • reloadAllComponents:刷新所有列。
  • reloadComponent:(NSInteger)component:刷新指定列。
  • selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated:选择指定列中的指定行,支持动画效果。

UIPickerView的代理方法用于指定列的高度、宽度以及数据展示方式。

数据源接口

数据源需要提供组件数和每列的行数。

- (NSInteger)numberOfComponentsInPickerView+(UIPickerView *)- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

示例使用场景

假设我们需要一个两列的选择器,这里第一列是省份,第二列是对应的城市。当用户选择一个省份后,第二列将显示该省份对应的城市。我们可以通过以下代码实现这一功能:

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

UIDatePicker控件

UIDatePicker用于显示日期选择,可以根据需求选择不同的模式和风格。

模式选择
  • **datePickerMode**属性可以选择四种模式:时间、日期、日期和时间、计时。
  • **preferredDatePickerStyle**属性选择三种风格:自动选择、滚轮、袖珍、内联模式。

在袖珍模式下,滚轮仅在点击时弹出修改界面。

重要属性
  • minimumDate:最小日期(除计时模式)。
  • maximumDate:最大日期(除计时模式)。
  • countDownDuration:计时模式下的时间总秒数。
  • minuteInterval:分钟间隔,默认为1。

计时模式下支持滚轮显示,普通模式下效果更优。

示例代码

以下是创建一个日期选择器的示例代码:

- (void)viewDidLoad {    [super viewDidLoad];    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 200)];    datePicker.datePickerMode = UIDatePickerModeDate;    datePicker分钟间隔设置为15且计时模式的`countDownDuration`设置为3600秒。    [self.view addSubview: date_picker];}#pragma mark - UIDatePickerDelegate- (void)datePicker:(UIDatePicker *)picker dateChanged:(NSDate *)date {    // 处理日期变动事件}- (void)datePicker:(UIDatePicker *)picker selectedDate:(NSDate *)date {    // 处理选中日期事件}

通过上述代码,我们可以根据需求配置日期选择器的类型和行为,灵活应对多种场景。最初选择自动模式可以根据设备屏幕适当调整布局。

转载地址:http://hjpvz.baihongyu.com/

你可能感兴趣的文章
重载和重写的区别:
查看>>
搭建Vue项目步骤
查看>>
linux 编译出现的错误
查看>>
账号转账演示事务
查看>>
idea创建工程时错误提醒的是architectCatalog=internal
查看>>
SpringBoot找不到@EnableRety注解
查看>>
简易计算器案例
查看>>
在Vue中使用样式——使用内联样式
查看>>
Find Familiar Service Features in Lightning Experience
查看>>
Explore Optimization
查看>>
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
查看>>
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
查看>>
OpenCV-未定义符号:hb_font_funcs_set_variation_glyph_func
查看>>
小程序之wx:request(转)
查看>>
连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
查看>>
解决数据库报ORA-02289:序列不存在错误
查看>>
map[]和map.at()取值之间的区别
查看>>
成功解决升级virtualenv报错问题
查看>>
【SQLI-Lab】靶场搭建
查看>>
Xception 设计进化
查看>>