【问题标题】:iOS UIDatePicker set max dateiOS UIDatePicker 设置最大日期
【发布时间】:2013-05-07 06:33:29
【问题描述】:

我在尝试限制日期时遇到问题。通过像self.datePicker.maximumDate = [NSDate date]; 这样设置日期,它只会将现在之后的日期显示为灰色,但允许用户选择此最大日期之后的日期。

So When the picker value changed I compare the selected date if up than the current date I edit it.

如果我同时使用这两种解决方案,我的行为会很奇怪,有什么想法吗?

- (IBAction)pickerValueChanged:(id)sender {

    dispatch_async(dispatch_get_main_queue(), ^{
        UIDatePicker *datePicker = (UIDatePicker *)sender;

        if ([self.datePicker.date compare:[NSDate date]] == NSOrderedDescending) {

            datePicker.date = [NSDate date];
        }

    });
}

当日期选择器中的日期值更改时触发此功能。如果我设置最小和最大日期,我会得到一个奇怪的行为。 有什么想法吗?

编辑:

【问题讨论】:

  • 在哪里设置 self.datePicker.maximumDate = [NSDate date];
  • 在 ViewController 的 viewDidLoad 方法中

标签: ios uidatepicker


【解决方案1】:

您可以在 xcode 中或以编程方式设置最大日期。

1.您可以通过以下代码行以编程方式设置选择器最大日期。

[self.yourPickerView setMaximumDate: [NSDate date]];

这行代码会将当前日期设置为可以在选择器中选择的最大日期。

【讨论】:

  • 不确定我是否理解您的第一条评论,我理解它是“......完全意思”。这个位是什么意思?另外,这比其他答案增加了什么价值?其他答案肯定已经提供了您的答案吗?
  • 忘掉我之前评论的最后一部分吧,事实上你的对正在发生的事情的描述增加了价值,因为其他人没有任何东西。为此 +1。
  • 我真的很震惊有人可以在这里接受一些批评,通常你会留下一个稍微负面的评论,这意味着一些有用的反馈,就像你刚刚杀了还有妈妈什么的。良好的编码。
【解决方案2】:

是的,您可以使用 .xib 和选择器设置设置最小和最大日期

【讨论】:

    【解决方案3】:

    是的,您可以将最大日期和最小日期设置为 UIDatePickerView

    下面是另一个stackover流程链接

    UIDatePicker, setting maximum and minimum dates based on todays date

    【讨论】:

    • 不良行为是什么意思?
    • 正在录屏,不到10分钟就到了
    【解决方案4】:
    - (IBAction) datePickerChanged:(id)sender {
    // When `setDate:` is called, if the passed date argument exactly matches the Picker's date property's value, the Picker will do nothing. So, offset the passed date argument by one second, ensuring the Picker scrolls every time.
    NSDate* oneSecondAfterPickersDate = [picker.date dateByAddingTimeInterval:1] ;
    if ( [picker.date compare:picker.minimumDate] == NSOrderedSame ) {
        NSLog(@"date is at or below the minimum") ;
        picker.date = oneSecondAfterPickersDate ;
    }
    else if ( [picker.date compare:picker.maximumDate] == NSOrderedSame ) {
        NSLog(@"date is at or above the maximum") ;
        picker.date = oneSecondAfterPickersDate ;
        }
    }
    

    【讨论】:

    • 我讨厌没有描述它在做什么的答案,所以我给这个 -1。答案应该包含描述的原因是,如果一个新手正在寻找答案,他们可能不明白其中只有代码的帖子实际上是做什么的。
    【解决方案5】:
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *currentDate = [NSDate date];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:currentDate];
    NSInteger year = [components year];
    
    NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];
    [formatter1 setDateFormat:@"yyyy-MM-dd"];
    NSString *dateString = [NSString stringWithFormat:@"%ld-12-31",(long)year];
    NSDate *maxDate = [formatter1 dateFromString:dateString];
    [self.dobPickerView setMaximumDate: maxDate];
    

    【讨论】:

    • 我讨厌没有描述它在做什么的答案,所以我给这个 -1。答案应该包含描述的原因是,如果一个新手正在寻找答案,他们可能不明白其中只有代码的帖子实际上是做什么的。
    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多