2013-10-02 50 views
0

因此几周前我要求提供一个关于如何在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不会回滚到当前日期。 2)注意1)正在发生某些原因,我不知道,导致disableDate被调用,但应用程序永远不会进入“如果”,就像我设置的条件永远不会得到满足。

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

这里的任何想法?

在此先感谢!

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

回答

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

和宾果游戏,限制被定义。

我希望这对你有所帮助。

+0

感谢您的帮助,Nekak。 虽然设置最小和最大日期属性只会使无效日期变灰。它只锁定一次日期,就像我在原帖中所说的那样。它滚动回到最近的日期(虽然不确定),然后用户可以选择他想要的任何日期(尽管无效日期仍然变灰)!这就是我决定做日期检查的原因。 – user2743901

1

好吧,所以我终于解决了。我会在这里发布我是如何做到这一点,以防别人与这种奇怪的日期选择器行为发生冲突。

因此,这里发生的情况是最大日期和最小日期属性也会将日期锁定在限制范围内。但他们没有更新日期选择器视图。另外,datepicker在值实际发生变化之前会这样做,所以当你的应用到达disableDate方法内的if时,它的日期已经设置回当前日期(或最近日期或类似的东西 - 但是一个有效的日期),如果将被跳过。

为了解决这个我想用的setDate:动画:以冗余方式,如:

[myDatePicker setDate:myDatePicker.date animated: YES] 

但随后的日期选择器不会做任何事情,所以我创建了一个与NSDate的加datepicker.date 1第二,然后设置新的日期。换句话说:

- (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触发方法。