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

Ios 如何自动推进datePicker中的其他字段?,ios,uidatepicker,Ios,Uidatepicker,假设我有一个UIDatePicker,模式设置为.date。 我想要以下行为: 例如,三月有30天。如果我滚动到30天以下,我希望月份自动增加到4月,依此类推 有这样的房产吗?我找不到 谢谢。我不认为用一个普通的UIDatePicker可以做你想做的事。您可以将操作附加到valueChanged事件,但直到日期选择器停止移动,才会调用该操作 您可能可以使用标准的UIPickerView创建自定义日期选择器。您可以使用数据源方法确定轮子何时转动,调用selectedRowinComponent:确

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

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

有这样的房产吗?我找不到


谢谢。

我不认为用一个普通的UIDatePicker可以做你想做的事。您可以将操作附加到valueChanged事件,但直到日期选择器停止移动,才会调用该操作

您可能可以使用标准的UIPickerView创建自定义日期选择器。您可以使用数据源方法确定轮子何时转动,调用selectedRowinComponent:确定为每个轮子选择了哪些值,然后调用selectRow_uU2;:inComponent:animated以在用户滚动月底后的一天时切换月份

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

最好的方法是使用基本上,当用户选择一个新的日期操作时,目标视图会做一些事情

下面是一些代码,如果将“日”值设置为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中


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

问题是,直到日期选择器停止转动,选择器才调用valueChanged操作。如果你滚动到月底,并且日轮不停地转动,你不会得到通知。我认为您必须创建一个自定义选择器,正如我在回答中概述的那样,以获得OP所追求的效果。