iOS UIDatePicker设置最大日期

时间:2013-05-07 06:33:30

标签: ios uidatepicker

我在试图限制日期方面遇到了问题。通过设置self.datePicker.maximumDate = [NSDate date];之类的日期,此日期之后的日期仅为灰色,但允许用户选择此最大日期之后的日期。

因此,当选择器值发生变化时,我会比较所选日期,如果高于当前日期,我会对其进行编辑。

如果我使用这两种解决方案,我会有奇怪的行为,任何想法?

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

    });
}

当日期选择器的日期值更改时,会触发此功能。如果我设置了最小和最大日期,我会得到一个奇怪的行为。 有什么想法吗?

编辑:

5 个答案:

答案 0 :(得分:4)

您可以在xcode中或以编程方式设置最大日期。

1.以编程方式,您可以使用以下代码行设置选取器最大日期。

[self.yourPickerView setMaximumDate: [NSDate date]];

这行代码会将当前日期设置为可在选择器中选择的最大日期。

答案 1 :(得分:2)

是的,您可以使用.xib和选择器设置

设置最小和最大日期

enter image description here

答案 2 :(得分:1)

是的,您可以将最大日期和最短日期设置为UIDatePicker视图

下面是另一个stackoverflow链接

UIDatePicker, setting maximum and minimum dates based on todays date

答案 3 :(得分:-1)

- (IBAction) datePickerChanged:(id)sender {
// When `setDate:` is called, if the passed date argument exactly matches the Picker's date property's value, the Picker will do nothing. So, offset the passed date argument by one second, ensuring the Picker scrolls every time.
NSDate* oneSecondAfterPickersDate = [picker.date dateByAddingTimeInterval:1] ;
if ( [picker.date compare:picker.minimumDate] == NSOrderedSame ) {
    NSLog(@"date is at or below the minimum") ;
    picker.date = oneSecondAfterPickersDate ;
}
else if ( [picker.date compare:picker.maximumDate] == NSOrderedSame ) {
    NSLog(@"date is at or above the maximum") ;
    picker.date = oneSecondAfterPickersDate ;
    }
}

答案 4 :(得分:-1)

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *currentDate = [NSDate date];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:currentDate];
NSInteger year = [components year];

NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [NSString stringWithFormat:@"%ld-12-31",(long)year];
NSDate *maxDate = [formatter1 dateFromString:dateString];
[self.dobPickerView setMaximumDate: maxDate];