Reputation: 286
When I select values from UIDatePicker
which shows after click on UITextField
, my TextFields are filled out same values
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)
}
Should I implement different datePicker for each TextField?
Upvotes: 0
Views: 46
Reputation: 318954
You add two actions to the date picker. The same date picker is used for both text fields. So when the data picker value changes for either text field, both selectors are called. Since both selectors are called, both text fields get updated with the new value.
Just have one select. Just add one action to the date picker. Then in the one selector, update the text field that is currently the first responder.
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
}
}
Upvotes: 3