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

问题描述 投票:0回答:1

当我从点击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吗?

ios swift datepicker textfield
1个回答
3
投票

您将两个操作添加到日期选择器。两个文本字段使用相同的日期选择器。因此,当任一文本字段的数据选择器值发生更改时,将调用两个选择器。由于两个选择器都被调用,因此两个文本字段都会使用新值进行更新。

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

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.