在iOS UIDatePicker中重置MinimumDate



我有两个UIDatePicker,一个在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.

如何在设置timePickerminimumDate属性后删除该属性,而不会引发此异常
谢谢。

编辑:我之所以尝试将其设置为nil,是因为苹果的文档中说minimumDate属性的默认值为nil(此处(。

此外,在将时间分量设为零后,我确实尝试将最短日期设置为用户选择的未来日期。这导致在拾取器中将时间选择为上午12点,这是可接受的。现在,如果用户再次选择今天的日期,当我设置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];
}

最新更新