在 iOS UIDatePicker 中重置 MinimumDate
Reset MinimumDate in iOS UIDatePicker
我有 2 个 UIDatePickers,一个在 UIDatePickerModeDate 中,另一个在 UIDatePickerModeTime 中。
如果第一个的日期设置为今天,那么第二个必须有一个限制,这样用户就不能select一个早于[的时间=29=]现在。为此,我使用 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 属性 的默认值是 无 (here).
此外,在将时间分量设为零之后,我确实尝试将最短日期设置为用户 select 指定的未来日期。这导致时间在选择器中被 select 编辑为上午 12 点,这是可以接受的。现在,如果用户再次 selects 今天的日期,当我设置 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];
}
我有 2 个 UIDatePickers,一个在 UIDatePickerModeDate 中,另一个在 UIDatePickerModeTime 中。
如果第一个的日期设置为今天,那么第二个必须有一个限制,这样用户就不能select一个早于[的时间=29=]现在。为此,我使用 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 属性 的默认值是 无 (here).
此外,在将时间分量设为零之后,我确实尝试将最短日期设置为用户 select 指定的未来日期。这导致时间在选择器中被 select 编辑为上午 12 点,这是可以接受的。现在,如果用户再次 selects 今天的日期,当我设置 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];
}