如何自动推进datePicker中的其他字段?

时间:2018-03-25 22:28:55

标签: ios uidatepicker

假设我有一个UIDatePicker,模式设置为.date。 我想要以下行为:

例如,3月有30天。如果我在第30天下面滚动,我希望月份自动增加到4月,依此类推。

有没有这样做的财产?我找不到一个。

感谢。

2 个答案:

答案 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中。

不,我知道没有这样做的属性。