删除/隐藏UIDatePicker最小/最大日期范围之外的行?

Jar*_*oss 9 iphone datepicker uidatepicker ipad ios

我有一个UIDatePicker设定的最小和最大日期.我想知道是否有办法隐藏日期/时间列的行,这些日期/时间是在我的最小日期之前或在我的最大日期之后.现在选择器显示每一天,但只有当前周可供选择(粗体),我想要的是将给定周范围之外的数字隐藏起来.这可以用UIDatePicker提供的方式完成,XCode还是我必须从头开始构建自己的选择器?

- (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];

}
Run Code Online (Sandbox Code Playgroud)

Jor*_*n H 2

使用minimumDatemaximumDateAPI 的行为将如您所解释的那样 - 仍然显示日期但不允许选择它们。目前无法隐藏那些超出提供范围的日期,但我确实为您提供了解决方案。

您可以生成一个包含要向用户显示的UIDatePicker所有 s 的数组,然后使用 a将它们呈现给用户,而不是使用 a的最小和最大日期。我已经为我自己的一个应用程序完成了这一点。NSDateUIPickerView

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;
}
Run Code Online (Sandbox Code Playgroud)