UIDatePicker的上限和下限

时间:2013-10-02 17:13:10

标签: iphone ios datepicker uidatepicker

几个星期前,我就如何在UIDatePicker上实际锁定特定日期范围提出了一个提示,而不仅仅是让它们变灰。它工作正常。 但现在我遇到了类似的情况,无法让它发挥作用。现在我有一个最小和最大日期,即我只想允许一个小的(或不是)日期间隔。

以下是我要做的事情:(我在日期选择器上添加了一个目标)

-(void) disableDate {
if ([datePicker.date compare:[NSDate date]] == NSOrderedDescending || [datePicker.date compare:datePicker.minimumDate] == NSOrderedAscending) {
    datePicker.date = [NSDate date];
    [datePicker reloadInputViews];
}

}

一些说明: 1)它仅在我第一次更改datepicker的日期时起作用。第二次(以及之后)它不再起作用 - datepicker不会滚动回当前日期。 2)注意1)由于某种原因发生我不知道,因为正在调用disableDate,但应用程序永远不会进入“if”,就像我设置的条件永远不会满足一样。

换句话说:我不知道它为什么滚动一次,因为它永远不会进入if语句,而且我也不知道为什么它永远不会进入if语句!

这里有什么想法吗?

提前致谢!

编辑:设置minimum.date和maximum.date。

2 个答案:

答案 0 :(得分:2)

好吧,如果您希望用户无法选择没有您的范围的日期,请使用:

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;

    datePicker.minimumDate=_minDate;
    datePicker.maximumDate=_maxDate;

定义了_minDate和_maxDate:

NSDateComponents* components=[[NSDateComponents alloc] init];

    [components setYear:1900];

    _minDate=[[NSCalendar currentCalendar] dateFromComponents:components];
    _maxDate=[NSDate date];

宾果游戏,界定了限制。

我希望这对你有所帮助。

答案 1 :(得分:1)

好的,所以我终于解决了。我会在这里发布我是如何做到这一点的,以防其他人为这种奇怪的日期选择行为而苦苦挣扎。

所以,这里发生的是最大日期和最小日期属性也将日期锁定在您的限制范围内。但他们这样做却没有更新datepicker视图。另外,datepicker在其值实际更改之前执行此操作,因此当您的应用程序到达disableDate方法中的if时,其日期已经设置回当前日期(或最近的日期或类似的东西 - 但是有效日期)并且if将被跳过。

为了解决这个问题,我想过以冗余的方式使用setDate:animated:,如:

[myDatePicker setDate:myDatePicker.date animated: YES]

然后,datepicker不会做任何事情,所以我创建了一个带有datepicker.date加1秒的NSDate,然后设置新的日期。换句话说:

- (void) disableDate {
NSDate * oneSecondAfterPickersDate = [datePicker.date dateByAddingTimeInterval:1] ;
if ( [datePicker.date compare:datePicker.minimumDate] == NSOrderedSame ) {
    datePicker.date = oneSecondAfterPickersDate ;
}
else if ( [datePicker.date compare:datePicker.maximumDate] == NSOrderedSame ) {
    datePicker.date = oneSecondAfterPickersDate ;
}
}

希望它可以帮助某人:)

编辑:忘了提及 - >我正在使用UIControlEventValueChanged来触发该方法。