Click UIButton To Show UIPickerView and Select ID on Button Title : Swift

2.5k Views Asked by At

MY Scenario, I am trying to create button click to open UIPickerView and selecte picker data to show on button title using swift. Here, Toolbar also I would like to add into the pickerview controller.

 let button = UIButton(type: .custom)
  button.setTitle("",for: .normal)
  button.frame = CGRect(x: CGFloat(amount_textfield.frame.size.width - 9), y: CGFloat(5), width: CGFloat(9), height: CGFloat(20))
  button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
  amount_textfield.leftView = button
  amount_textfield.leftViewMode = .always

 @IBAction func refresh(_ sender: Any) {
    // Here, I need to execute picker view 
 }
1

There are 1 best solutions below

2
Robert Dresler On

There are few steps that you have to follow:

  1. Create initially hidden UIPickerView and set its delegate and dataSource

    @IBOutlet weak var pickerView: UIPickerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
    }
    
  2. Have data source array which you use for this picker view

    class ViewController: UIViewController {
        var array = [String]()
    }
    
    extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource {
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return array.count
        }
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return array[row]
        }
    }
    
  3. Unhide your picker view when button is pressed

    pickerView.isHidden = false
    
  4. Integrate picker view's delegate method pickerView(_:didSelectRow:inComponent:). When row is selected, set title of button as element from your data source array at index as selected row

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        button.setTitle(array[row], for: .normal)
    }
    
  5. Optional: Hide picker view

    pickerView.isHidden = true