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

时间:2013-03-20 06:59:18

标签: iphone ios datepicker ios6.1

iOS 6.1中的奇怪行为我已将日期选择器的最短日期设置为当前日期

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

enter image description here

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

4 个答案:

答案 0 :(得分:8)

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

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

    });
}

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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];

答案 3 :(得分:1)

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

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