在iOS UIDatePicker中重置MinimumDate

问题描述

我有2个 UIDatePickers ,一组在 UIDatePickerModeDate 中,另一组在 UIDatePickerModeTime 中。

如果第一个日期的日期设置为今天,则第二个日期必须具有限制,以使用户无法选择现在之前的时间。为此,我使用 setMinimumDate 函数。但是,如果用户设置将来的日期,则需要重设 minimumDate 属性,这意味着选择器上不应设置 minimumDate

我可以通过致电实现

 [self.timePicker setMinimumDate:nil];

但这在Xcode控制台输出中给了我一个例外,如下所示。

-[__NSCFCalendar components:fromDate:]: date cannot be nil
Future exception.
A few of these errors are going to be reported with this complaint,then further violations will simply be ignored.

设置 timePicker minimumDate 属性后,如何在不引发此异常的情况下将其删除
谢谢。

编辑: 我尝试将其设置为 nil 的原因是因为Apple文档说明了 minimumDate 属性认值为 nil here )。

此外,在将时间部分设为零后,我确实尝试将最小日期设置为用户选择的将来日期。这导致在选择器中将时间选择为12 AM,这是可以接受的。现在,如果用户再次选择今天的日期,那么当我设置 minimumDate 属性时,什么也不会发生,也就是说,我无法使用此属性来切换 minimumDate 代码如下:

(void)setMinimumDateForTimePicker {
 if([[NSCalendar currentCalendar] isDateInToday:self.datePicker.date]) {
      NSLog(@"Min date for today");
      [self.timePicker setMinimumDate:[self roundUpToNearestFifteenMinutes:[NSDate date]]];
 } else {
     // date is in the future so zero out time
     NSLog(@"Min date for the future");
     NSDateComponents* selectedDateWithZeroTime = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self.datePicker.date];
 [self.timePicker setMinimumDate:[[NSCalendar currentCalendar] dateFromComponents:selectedDateWithZeroTime]];
 }
 [self updateStartTimeField:nil];

}

解决方法

这是我最终想要完成的代码。

- (void)setMinimumDateForTimePicker {
    if([[NSCalendar currentCalendar] isDateInToday:self.datePicker.date]) {
        [self.timePicker setMinimumDate:[self roundUpToNearestFifteenMinutes:[NSDate date]]];
    } else {
        [self.timePicker setMinimumDate:[[NSCalendar currentCalendar] startOfDayForDate:[NSDate date]]];
    }
    [self updateStartTimeField:nil];
}