#ios #swift #datepicker #textfield
#iOS #swift #datepicker #текстовое поле
Вопрос:
Когда я выбираю значения, из 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 для каждого текстового поля?
Ответ №1:
Вы добавляете два действия в средство выбора даты. Для обоих текстовых полей используется один и тот же инструмент выбора даты. Поэтому, когда значение средства выбора данных изменяется для любого текстового поля, вызываются оба селектора. Поскольку вызываются оба селектора, оба текстовых поля обновляются новым значением.
Просто выберите одно. Просто добавьте одно действие в средство выбора даты. Затем в одном селекторе обновите текстовое поле, которое в настоящее время является первым ответчиком.
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
}
}
Комментарии:
1. Это то, что мне было нужно! Спасибо!