Ios UIDatePicker最小/最大日期

Ios UIDatePicker最小/最大日期,ios,objective-c,date,datepicker,uikit,Ios,Objective C,Date,Datepicker,Uikit,我创建了一个UIDatePicker,这样用户就可以选择他们的生日,我还尝试设置了允许的最小和最大日期。然而,像我在下面所做的那样设置最小/最大日期只会使超出范围的日期变灰,但您仍然可以滚动到它们。如何防止日期选择器滚动到这些日期,而不仅仅是将它们变灰 NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:1]; [comps setMonth:1]; [comps setYear:1914]; NSDa

我创建了一个UIDatePicker,这样用户就可以选择他们的生日,我还尝试设置了允许的最小和最大日期。然而,像我在下面所做的那样设置最小/最大日期只会使超出范围的日期变灰,但您仍然可以滚动到它们。如何防止日期选择器滚动到这些日期,而不仅仅是将它们变灰

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1];
[comps setMonth:1];
[comps setYear:1914];
NSDate *minimumDate = [[NSCalendar currentCalendar] dateFromComponents:comps];

NSDateComponents *compsMax = [[NSDateComponents alloc] init];
[compsMax setDay:31];
[compsMax setMonth:12];
[compsMax setYear:2013];
NSDate *maximumDate = [[NSCalendar currentCalendar] dateFromComponents:compsMax];

birthdayPicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(220, 150, 500, 10)];
[birthdayPicker setDatePickerMode:UIDatePickerModeDate];
[birthdayPicker setMinimumDate:minimumDate];
[birthdayPicker setMaximumDate:maximumDate];
[birthdayPicker reloadInputViews];
[self addSubview:birthdayPicker];

我承认,这不是最好的,但试一试,也许可以改进:

viewDidLoad

[birthdayPicker addTarget:self
                   action:@selector(pickerValueChanged:)
         forControlEvents:UIControlEventValueChanged];
代码中的其他地方

- (IBAction)pickerValueChanged:(id)sender {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIDatePicker *datePicker = (UIDatePicker *)sender;
        if ([datePicker.date compare:datePicker.maximumDate] == NSOrderedDescending) {
            datePicker.date = datePicker.maximumDate;
        }
        else if ([datePicker.date compare:datePicker.minimumDate] == NSOrderedAscending) {
            datePicker.date = datePicker.minimumDate;
        }

    });
}

这似乎是一种工作。在我的代码中实现了这个方法之后,datepicker很不幸仍然会滚动到超出范围的日期,但它会(在一秒钟或2秒钟内)跳回有效的最小/最大日期。它肯定比我以前的好,所以谢谢你。@user1855952是的,我意识到它不是最好的:(但我会看看我是否能做得更好,这可能只是将控件事件更改为
UIControlEventValueChanged
以外的内容。我有一个相同的问题。我通过对UIPickerView进行子分类解决了这个问题。所以基本上我编写了自己的日期选择器。您可能必须编写自己的日期选择器类