为什么 UIDatePicker 填充两个不同的 TextField 相同的值

Why UIDatePicker fills two different TextFields same values

当我 select 来自 UIDatePicker 的值(点击 UITextField 后显示)时,我的 TextFields 填写了相同的值

override func viewDidLoad() {
        super.viewDidLoad()
        datepickerView = UIDatePicker()
        datepickerView?.datePickerMode = .time

        datepickerView?.addTarget(self, action: #selector(HomePageViewController.timeChangedForStartWork(datePicker:)), for: .valueChanged)

        datepickerView?.addTarget(self, action: #selector(HomePageViewController.timeChangedForEndWork(datePicker:)), for: .valueChanged)

        workHoursStartTextField.inputView = datepickerView
        workHoursEndTextField.inputView = datepickerView
}

@objc func timeChangedForStartWork(datePicker: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        workHoursStartTextField.text = dateFormatter.string(from: datePicker.date)
    }

@objc func timeChangedForEndWork(datePicker: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        workHoursEndTextField.text = dateFormatter.string(from: datePicker.date)

    }

我应该为每个 TextField 实现不同的 datePicker 吗?

您向日期选择器添加了两个操作。两个文本字段使用相同的日期选择器。因此,当任一文本字段的数据选择器值发生变化时,都会调用 select 或。由于两个 selector 都被调用,所以两个文本字段都会更新为新值。

只要一个select。只需向日期选择器添加一项操作。然后在select或者,更新当前第一响应者的文本字段。

override func viewDidLoad() {
    super.viewDidLoad()

    datepickerView = UIDatePicker()
    datepickerView?.datePickerMode = .time

    datepickerView?.addTarget(self, action: #selector(timeChanged), for: .valueChanged)

    workHoursStartTextField.inputView = datepickerView
    workHoursEndTextField.inputView = datepickerView
}

@objc func timeChanged(datePicker: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    let str = dateFormatter.string(from: datePicker.date)
    if workHoursStartTextField.isFirstResponder {
        workHoursStartTextField.text = str
    } else {
        workHoursEndTextField.text = str
    }
}