问题描述
我有2个 UIDatePickers ,一组在 UIDatePickerModeDate 中,另一组在 UIDatePickerModeTime 中。
如果第一个日期的日期设置为今天,则第二个日期必须具有限制,以使用户无法选择现在之前的时间。为此,我使用 setMinimumDate 函数。但是,如果用户设置将来的日期,则需要重设 minimumDate 属性,这意味着选择器上不应设置 minimumDate 。
我可以通过致电实现
[self.timePicker setMinimumDate:nil];
-[__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];
}