I have created a pickerView that uses 3 different arrays to populate 3 textfields but when I tap on one textfield, select a row, and then directly tap another textfield, my pickerView does not update to the information in the array for that textfield.
If I tap on a textfield then tap away to dismiss the pickerview and then tap another textfield it updates and works fine.
var teams = [String]()
var schedules = ["A","B"]
var services = ["9AM","12PM","5PM"]
var pickerView:UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate = self
pickerView.dataSource = self
teamTextField.inputView = self.pickerView
serviceTextField.inputView = self.pickerView
scheduleTextField.inputView = self.pickerView
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if teamTextField.isFirstResponder() {
return teams.count
}
else if scheduleTextField.isFirstResponder() {
return schedules.count
}
else {
return services.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if teamTextField.isFirstResponder() {
return teams[row]
}
else if scheduleTextField.isFirstResponder() {
return schedules[row]
}
else {
return services[row]
}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if teamTextField.isFirstResponder() {
let itemSelected = teams[row]
teamTextField.text = itemSelected
}
else if scheduleTextField.isFirstResponder() {
let itemSelected = schedules[row]
scheduleTextField.text = itemSelected
}
else if serviceTextField.isFirstResponder() {
let itemSelected = services[row]
serviceTextField.text = itemSelected
}
}
func textFieldDidBeginEditing(textField: UITextField) {
pickerView.reloadAllComponents()
}
That should be all the necessary code you need. If you need anything else, let me know.
Try to add this:
@IBAction func textFieldDidBeginEditing(sender: AnyObject) {
pickerView.reloadAllComponents()
}
and connect it to the 'Editing Did Begin' sent events of your UITextField's