【问题标题】:Reset MinimumDate in iOS UIDatePicker在 iOS UIDatePicker 中重置 MinimumDate
【发布时间】: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.

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

编辑: 我尝试将其设置为 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


【解决方案1】:

这是我最终尝试做的代码。

- (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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多