首页 文章

UIDatePicker的上限和下限

提问于
浏览
0

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

这是我正在尝试做的事情:(我在datepicker上添加了一个目标)

-(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 回答

  • 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

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

    因此,这里发生的是最大日期和最小日期属性也将日期锁定在您的限制范围内 . 但他们这样做却没有更新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来触发该方法 .

相关问题