Почему UIDatePicker заполняет два разных TextFields одинаковыми значениями - PullRequest
0 голосов
/ 20 апреля 2019

Когда я выбираю значения из UIDatePicker, которое отображается после нажатия на UITextField, мои текстовые поля заполняются одинаковыми значениями

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)

    }

Должен ли я реализовать разные DatePicker для каждого TextField?

1 Ответ

3 голосов
/ 20 апреля 2019

Вы добавляете два действия в средство выбора даты.Один и тот же указатель даты используется для обоих текстовых полей.Поэтому, когда значение средства выбора данных изменяется для любого текстового поля, вызываются оба селектора.Поскольку оба селектора вызываются, оба текстовых поля обновляются с новым значением.

Просто выберите один выбор.Просто добавьте одно действие в палитру дат.Затем в одном селекторе обновите текстовое поле, которое является первым респондентом.

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...