Search code examples
iosswiftuipickerviewtextfieldpickerview

How to use UIPickerView with TextField more than once?


Below is my code, this allows one Textfield to have a pop up pickerView as an input source. I want to know what i need to add to allow a second TextField to also have a pop up pickerView as a input source.

I have managed to get the firstNametextfield working, but havent managed to get the secondNames working.

class RefereeViewController: UIViewController, UIPickerViewDelegate,UIPickerViewDataSource, UITextFieldDelegate, UINavigationControllerDelegate
{

@IBOutlet weak var firstNameTextField: UITextField!

@IBOutlet weak var secondNameTextField: UITextField!


var firstNames = ["Lewis", "Jason","Alex","Mason"]

var secondNames = ["Davies", "Jones","Rees","Kristensen"]


var pickerView = UIPickerView()

override func viewDidLoad()

 {

super.viewDidLoad()

pickerView.delegate = self

pickerView.dataSource = self

        firstNameTextField.inputView = pickerView
        firstNameTextField.textAlignment = .center
        firstNameTextField.placeholder = "Select Name"
}

public func numberOfComponents(in pickerView: UIPickerView) -> Int
    {
        return 1
    }

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {

            return firstNames.count

    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {

        return firstNames[row]

    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
            firstNameTextField.text = reports[row]
    }

Solution

  • class RefereeViewController: UIViewController, UIPickerViewDelegate,UIPickerViewDataSource, UITextFieldDelegate, UINavigationControllerDelegate
    {
    
        @IBOutlet weak var firstNameTextField: UITextField!
    
        @IBOutlet weak var secondNameTextField: UITextField!
    
    
        var firstNames = ["Lewis", "Jason","Alex","Mason"]
    
        var secondNames = ["Davies", "Jones","Rees","Kristensen"]
    
    
        let firstNamePicker = UIPickerView()
        let secondNamePicker = UIPickerView()
    
        override func viewDidLoad()
    
        {
    
            super.viewDidLoad()
    
            firstNamePicker.delegate = self
            firstNamePicker.dataSource = self
            secondNamePicker.delegate = self
            secondNamePicker.dataSource = self
    
            firstNameTextField.inputView = firstNamePicker
            firstNameTextField.textAlignment = .center
            firstNameTextField.placeholder = "Select First Name"
    
            secondNameTextField.inputView = secondNamePicker
            secondNameTextField.textAlignment = .center
            secondNameTextField.placeholder = "Select Second Name"
    
        }
    
        public func numberOfComponents(in pickerView: UIPickerView) -> Int
        {
            return 1
        }
    
        public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
        {
    
            return pickerView == firstNamePicker ? firstNames.count : secondNames.count
    
        }
    
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
        {
            if pickerView == firstNamePicker {
                firstNameTextField.text = firstNames[row]
            } else {
                secondNameTextField.text = secondNames[row]
            }
        }
    
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    
            return pickerView == firstNamePicker ? firstNames[row] : secondNames[row]
        }
    }