如何让UIDatePicker自动进阶日期字段?超当月天数自动切换月份
关于UIDatePicker日期自动进位的问题
嘿,这个问题我刚好碰到过!其实默认的UIDatePicker在.date模式下,已经自带你想要的日期自动进位功能啦,可能你测试的时候没留意到细节?
举个实际例子:
- 当你在3月(实际有31天)滚动到31号之后,picker会自动跳转到4月1号;
- 如果是平年的2月,滚动过28号就会直接到3月1号;闰年的话则是29号之后跳转。
系统会自动根据当前选中月份的实际天数来处理进位逻辑,不需要额外设置任何属性。如果你没看到这个效果,不妨检查下这几点:
- 有没有自定义过picker的代理或者重写了它的行为;
- 测试的iOS版本是不是过于老旧(这个功能从iOS 2.0开始就支持了,基本不会有版本问题)。
当然,如果你的需求是自定义日历规则(比如强制某个月份只有30天,不管实际日历),那默认属性确实满足不了,这时候需要手动监听picker的valueChanged事件,自己计算并设置日期:
@IBAction func onDatePickerValueChanged(_ sender: UIDatePicker) { let calendar = Calendar.current guard var dateComponents = calendar.dateComponents([.year, .month, .day], from: sender.date) else { return } // 示例:强制3月最多30天,超过则跳转到4月1号 if dateComponents.month == 3, let day = dateComponents.day, day > 30 { dateComponents.month! += 1 dateComponents.day = 1 if let adjustedDate = calendar.date(from: dateComponents) { sender.setDate(adjustedDate, animated: true) } } }
希望这个解答能帮到你!
内容的提问来源于stack exchange,提问作者Toma Radu-Petrescu
相关产品推荐
相关产品推荐

