0

因此,几周前,我询问了如何在 UIDatePicker 上实际锁定特定日期范围的提示,而不是仅仅将它们变灰。它工作得很好。但是现在我遇到了类似的情况,无法正常工作。现在我有一个最小和一个最大日期,即我只想允许一个小的(或不)日期间隔。

这是我想要做的:(我在日期选择器上添加了一个目标)

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

}

一些注意事项:1)它仅在我第一次更改日期选择器的日期时起作用。第二次(并继续)它不再起作用 - datepicker 不会滚动回当前日期。2)注1)由于某种我不知道的原因发生,导致disableDate被调用,但应用程序永远不会进入“如果”,就像我设置的条件永远不会得到满足。

换句话说:我不知道为什么它会滚动一次,因为它从来没有进入 if 语句,我也不知道为什么它从来没有进入 if 语句!

这里有什么想法吗?

提前致谢!

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

4

2 回答 2

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

宾果游戏,限制是定义的。

我希望这对你有帮助。

于 2013-10-02T18:47:07.613 回答
1

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

所以,这里发生的是最大日期和最小日期属性也将日期锁定在您的限制范围内。但他们这样做没有更新日期选择器视图。另外,日期选择器在其值实际更改之前执行此操作,因此当您的应用程序到达 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 来触发该方法。

于 2013-10-03T21:29:43.557 回答