本文共 3429 字,大约阅读时间需要 11 分钟。
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用于显示日期选择,可以根据需求选择不同的模式和风格。
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/