UIDatePicker最小/最大date

我创build了一个UIDatePicker,以便用户可以select他们的生日,并尝试设置最小和最大允许date。 但是,像下面所做的那样设置最小/最大date只会使date超出界限,但您仍然可以滚动到这些date。 如何防止dateselect器滚动到这些date,而不仅仅是将它们灰掉?

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; } }); }