假设我有一个UIDatePicker
,模式设置为.date
。
我想要以下行为:
例如,3月有30天。如果我在第30天下面滚动,我希望月份自动增加到4月,依此类推。
有没有这样做的财产?我找不到一个。
感谢。
答案 0 :(得分:1)
我认为没有办法用普通的UIDatePicker做你想做的事。您可以将操作附加到valueChanged事件,但在日期选择器停止移动之前不会调用该操作。
您可以使用标准UIPickerView
创建自定义日期选择器。您可以使用数据源方法来确定" wheel"转动,调用selectedRow(inComponent:)
以确定为每个轮子选择了哪些值,然后如果用户滚动月份的那一天,则调用selectRow(_:inComponent:animated)
来切换月份。
答案 1 :(得分:0)
如何自动推进datePicker中的其他字段?
执行此操作的最佳方法是使用Target-Action design pattern.基本上,当用户选择新日期(操作)时,视图(目标)会执行某些操作。
这里有一些代码,如果将日期值设置为0,则将其更改为1:
override func viewDidLoad() {
...
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
datePicker.addTarget(self, action: #selector(doStuff(sender:)), for: UIControlEvents.valueChanged)
view.addSubview(datePicker)
...
}
@IBAction func doStuff(sender: UIDatePicker) {
let calendar = Calendar.current
let components = calendar.dateComponents([.day], from: sender.date)
if components.day == 0 {
// Using Calendar.current automatically takes care of Time Zones for us.
if let date = calendar.date(byAdding: .day, value: 1, to: sender.date) {
sender.setDate(date, animated: true)
}
}
}
注意:此示例位于Swift 4中。
不,我知道没有这样做的属性。