Several types of selections with multiple inputs to the Swift text box

I was looking for a forum and nothing helped. I use 4 text fields in one view controller, and for each text field I use a separate pickerView as inputView for textFields (4pickers).

When I click on the first textField, pickerView1 appears successfully and the text field displays the data, however when I click on the second, third and fourth text fields, the first pickerView appears. I suspect the error is in inputView declarations.

And I would be so grateful if you could help add the "done" button to pickerView.

My code is:

class ViewController1: UIViewController, UIPickerViewDelegate { @IBOutlet var pickerView1: UIPickerView! @IBOutlet var pickerView2: UIPickerView! @IBOutlet var pickerView3: UIPickerView! @IBOutlet var pickerView4: UIPickerView! @IBOutlet var textField1: UITextField! @IBOutlet var textField2: UITextField! @IBOutlet var textField3: UITextField! @IBOutlet var textField4: UITextField! var hazards = ["a","b", "c"] var reasons = ["d", "e", "f"] var site = ["v","h","i","j"] var line = ["k", "l","m", "n"] override func viewDidLoad() { super.viewDidLoad() pickerView1 = UIPickerView() pickerView2 = UIPickerView() pickerView3 = UIPickerView() pickerView4 = UIPickerView() pickerView1.delegate = self pickerView2.delegate = self pickerView3.delegate = self pickerView4.delegate = self self.textField1.inputView = self.pickerView1; self.textField2.inputView = self.pickerView2; self.textField3.inputView = self.pickerView3; self.textField4.inputView = self.pickerView4; } func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView.tag == 0 { return hazards.count } else if pickerView.tag == 1 { return reasons.count } else if pickerView.tag == 2 { return site.count } else if pickerView.tag == 3 { return line.count } return 1 } func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { if pickerView.tag == 0 { return hazards[row] } else if pickerView.tag == 1 { return reasons[row] } else if pickerView.tag == 2 { return site[row] } else if pickerView.tag == 3 { return line[row] } return "" } func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView.tag == 0 { textField1.text = hazards[row] } else if pickerView.tag == 1 { textField2.text = reasons[row] } else if pickerView.tag == 2 { textField3.text = site[row] } else if pickerView.tag == 3 { textField4.text = line[row] } } } 
+8
uitextfield swift uipickerview
source share
1 answer

You use the picker views < tag property to decide which array is the data source for this type of selection, but you did not set the tags initially. The default tag value is zero, so all four choices have the same data. After instantiating your collector, add the following:

 pickerView1.tag = 0 pickerView2.tag = 1 pickerView3.tag = 2 pickerView4.tag = 3 
+10
source share

All Articles