【发布时间】:2020-09-14 00:06:38
【问题描述】:
我有 2 个 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.
如何在设置 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];
}
【问题讨论】:
-
好吧,错误信息告诉你答案。我不知道你认为“重置”是什么意思,但你设置的日期不能是
nil。 “重置”对您意味着什么?如果您希望它没有最小日期,即允许选择尽可能早的日期,请使用Date.distantPast。如果您的意思是今天的开始,请使用今天的开始。但你不能说nil,这很简单。 -
您是否尝试设置自定义日期和时间?例如。今天14:00。意思是不能选择14:00之前的时间
-
@matt 我编辑了我的问题以添加更多细节并阐明其含义。
-
@AnisMansuri 我尝试了你的建议,但由于某种原因我似乎无法切换 minimumDate 设置。
标签: ios uidatepicker