删除/隐藏 UIDatePicker 最小/最大日期范围之外的行?
Posted
技术标签:
【中文标题】删除/隐藏 UIDatePicker 最小/最大日期范围之外的行?【英文标题】:remove/hide rows outside minimum/maximum date range of UIDatePicker? 【发布时间】:2013-09-05 06:14:57 【问题描述】:我有一个UIDatePicker
,设置了最小和最大日期。我想知道是否有一种方法可以隐藏在我的最小日期之前或在我的最大日期之后的日期/时间的列的行。现在选择器每天都会显示,但只有当前周可供选择(粗体),我希望将给定周范围之外的数字从视图中隐藏。这可以通过XCode
提供的UIDatePicker
来完成,还是我必须从头开始构建自己的选择器?
- (void)viewDidLoad
[super viewDidLoad];
self.formatter = [NSDateFormatter new];
[self.formatter setDateFormat:@"dd:hh:mm:ss"];
NSDate *now = [NSDate date];
picker.minimumDate = [NSDate date];
picker.maximumDate = [now dateByAddingTimeInterval:604800];
[picker setDate:now animated:YES];
self.counterLabel.text = [now description];
self.now = [NSDate date];
self.counterLabel.text = [self.formatter stringFromDate:self.now];
【问题讨论】:
我也在寻找答案。你找到什么了吗...请分享 【参考方案1】:使用minimumDate
和maximumDate
API 的行为将如您所解释的那样 - 仍然显示日期但不允许选择它们。目前无法隐藏超出提供范围的日期,但我确实为您提供了解决方案。
您可以生成一个包含要显示给用户的所有NSDate
s 的数组,而不是使用UIDatePicker
的最小和最大日期,然后使用UIPickerView
将它们显示给用户.我已经为我自己的一个应用程序做到了这一点。
self.datePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 162)];
self.datePicker.dataSource = self;
self.datePicker.delegate = self;
//...
#pragma mark - UIPickerView Data Source and Delegate
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
return 1;
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
return [self.availableDates count];
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
return 28;
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.font = [UIFont systemFontOfSize:20];
label.textColor = [UIColor blackColor];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEE, MMMM d";
label.text = [dateFormatter stringFromDate:self.availableDates[row]];
[label sizeToFit];
return label;
【讨论】:
以上是关于删除/隐藏 UIDatePicker 最小/最大日期范围之外的行?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIDatepicker 组件从日/月/年更改为年/月/日