iOS 6.1 中的奇怪行为我已经为我的日期选择器设置了最小日期为当前日期,如下所示
NSDate *currentTime = [NSDate date];
[picker setMinimumDate:currentTime];
但是当我运行应用程序时,我可以滚动到过去的日期,虽然它没有被选中,但选择器不会跳回当前日期。它仅在 iOS 6.1 版本中发生,并且在休息选择器中表现正常。
iOS 6.1 中的奇怪行为我已经为我的日期选择器设置了最小日期为当前日期,如下所示
NSDate *currentTime = [NSDate date];
[picker setMinimumDate:currentTime];
但是当我运行应用程序时,我可以滚动到过去的日期,虽然它没有被选中,但选择器不会跳回当前日期。它仅在 iOS 6.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];
}
});
}
当日期选择器中的日期值发生变化时触发此函数。您可以在此处设置最大值或最小值。
您必须设置最小和最大日期,例如:
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];
试试这个代码
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];
该属性是一个 NSDate 对象或 nil(默认值),这意味着没有最大日期。此属性以及 minimumDate 属性允许您指定有效的日期范围。如果最小日期值大于最大日期值,则忽略这两个属性。在倒数计时器模式 (UIDatePickerModeCountDownTimer) 中,最小和最大日期也会被忽略。
尝试设置有效的最小和最大日期。这个对我有用。