首页 文章

在iOS日期选择器中设置最小和最大月份,但应更新选择器视图

提问于
浏览
1

在视图中选择日期字段时,将显示日期选择器 . 我希望将滚动限制为比当前月份少至少2个月,最多比当前月份多4个月 . 我见过类似的例子 . 例如:对于当月11月,月份范围应为明年9月至3月 .

我测试了this例子,但没有成功 .

// Configure date picker
- (void) initializeDatePicker {
    _datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 600, 160)];
    _datePicker.backgroundColor = [UIColor whiteColor];
    _datePicker.datePickerMode = UIDatePickerModeDate;
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setMonth:-2];
NSDate *minDate = [gregorian dateByAddingComponents:comps toDate:currentDate  options:0];
[comps setMonth:4];
NSDate *maxDate = [gregorian dateByAddingComponents:comps toDate:currentDate  options:0];

_datePicker.minimumDate = minDate;
_datePicker.maximumDate = maxDate;


[_datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
[_txfDateTextField setInputView:_datePicker];
selectedDate =[NSDate date];
}

UPDATE: 以上代码更新了日期选择器对象 . 但是,问题是日期选择器视图没有变化 . 对于上面的例子,我希望滚动限制从9月到明年3月的滚动 . 这样,用户在滚动时不会被淹没 . 从更好的角度来看 .

1 回答

  • 1

    好的,基于扩展的讨论,我现在明白,目标是删除超出范围的月份 .

    您无法使用标准日期选择器 . 您必须使用 UIPickerView 构建自定义控件 .

    简短的回答是,“不要这样做 . ”

    如果你想允许2个月前,4个月前进:

    如果您当前的日期是2016年11月:

    有效月份为2016年9月,10月,11月,2016年12月以及2017年1月,2月和3月 .

    因此,如果用户选择2016,则需要在9月,10月,11月填充月份选择器轮 . 然后,如果用户切换到2017,则需要仅在1月,2月和3月重建月轮 .

    但是,现在你're not using a date picker, you'使用 UIPickerView ,你想像日期选择器一样 act .

    因此,除了根据当前年度重建月份微调器之外,您还必须管理设置日期选择器以显示当前所选年份和月份的有效天数 . 大多数月份有30或31天,但二月呢?闰年怎么样?几个世纪,这不是闰年呢?

    另外,你正在构建一个看起来像日期选择器的控件,而且有点像但不完全像日期选择器 .

    除了格里高利,你还要办理日历吗?希伯来语,阿拉伯语,中国日历怎么样?你需要做的就是让所有这些工作正常 .

    Apple在可用性研究上投入了大量资金,并提出了一个运行良好的标准控件,并且确实处理了不同日历系统的本地化等 .

    简而言之,这是一个你想做的兔子洞 .

相关问题