日期选择器滚动到过去的日期,即使最小日期设置为当前日期

Posted

技术标签:

【中文标题】日期选择器滚动到过去的日期,即使最小日期设置为当前日期【英文标题】:Date picker scrolls to past date, even though minimum date is set to current date 【发布时间】:2013-03-09 04:11:00 【问题描述】:

ios 6.1 中的奇怪行为我已将日期选择器的最小日期设置为当前日期,如下所示

NSDate *currentTime = [NSDate date];
[picker setMinimumDate:currentTime];

但是当我运行应用程序时,我可以滚动到过去的日期,虽然它没有被选中,但选择器不会跳回当前日期。它仅在 iOS 6.1 版本中发生,并且在休息选择器中表现正常。

【问题讨论】:

检查我编辑的答案.. 【参考方案1】:

我遇到了和你一样的问题,只手动将日期设置为最大日期(在这种情况下,我将限制设置为当前日期):

- (IBAction)pickerValueChanged:(id)sender 

    dispatch_async(dispatch_get_main_queue(), ^
        UIDatePicker *datePicker = (UIDatePicker *)sender;

        if ([self.datePicker.date compare:[NSDate date]] == NSOrderedDescending) 

            datePicker.date = [NSDate date];
        

    );

当日期选择器中的日期值更改时触发此功能。您可以在此处设置最大值或最小值。

【讨论】:

这是一个问题还是一个答案?如果您有任何问题,请提出新问题***.com/questions/ask 回答一个额外的问题 ;) 请删除您的“奖励”问题(这样您不会得到任何答案,并且会混淆实际答案) - 如果您真的想回答您的问题,请提出一个新问题。跨度> 实际上datepicker返回的是前一个日期而不是冻结的日期。所以比较是不可能的【参考方案2】:

试试这个代码

 NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 NSDate *currentDate = [NSDate date];
 NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
 [comps setYear:30];
 NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
 [comps setYear:-30];
 NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

 [datePicker setMaximumDate:maxDate];
 [datePicker setMinimumDate:minDate];

【讨论】:

你真的得到了像你的答案一样的当前日期吗..? @Prem 我已经尝试过您的解决方案,但它不起作用。这是 iOS 6.1 中的错误吗? code4app.net/ios/Local-Notifier/4fb5e7c06803fa3a7f000000我从这个链接得到了样本..如果有任何错误请教我..thks @NitinGohel 是的,我只在 iOS 6.1 中遇到问题,其余一切都很好。 @Prem 我已经下载了您发送的通知程序的源代码。在那个应用程序中,我可以滚动到过去的日期。我的要求是当用户滚动到过去的日期选择器时必须将他带回当前日期。由于日期选择器没有委托方法来处理这种情况,我该如何控制它?主要的是,这种奇怪的行为只存在于 iOS 6.1 中。【参考方案3】:

您必须设置最小和最大日期,例如:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];

NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[datePicker setMinimumDate:minDate];

【讨论】:

【参考方案4】:

该属性是一个 NSDate 对象或 nil(默认),这意味着没有最大日期。此属性以及 minimumDate 属性允许您指定有效的日期范围。如果最小日期值大于最大日期值,则忽略这两个属性。在倒数计时器模式 (UIDatePickerModeCountDownTimer) 中,最小和最大日期也会被忽略。

尝试同时设置有效的最小和最大日期。 它对我有用。

【讨论】:

以上是关于日期选择器滚动到过去的日期,即使最小日期设置为当前日期的主要内容,如果未能解决你的问题,请参考以下文章

日期选择控件

将输入类型日期最小值设置为当前日期角度 12

如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)

如何在 android 日期选择器中将特定选定日期设置为最小日期? [复制]

日期选择器不应该接受小于当前日期的过去日期

DataTimePicker 怎样设置可以不能选择当前日期之后的时间