Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show UIPickerView text field is selected, then hide after selected

Tags:

I am trying to create a text box that when it is selected a UIPickerView opens up with choices to select from. Once selected, the UIPickerView hides and the selected item is displayed in the text box. I tried different pieces of code I found online but I just can't get it to work. If someone can suggest a complete code for this or tell me what I am doing wrong in my code, that would be super awesome. Thanks so much.

Here is my code:

@IBOutlet var textfieldBizCat: UITextField! @IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()  var bizCat = ["Cat One", "Cat Two", "Cat Three"]   override func viewDidLoad() {     super.viewDidLoad()      var bizCatCount = bizCat.count      self.textfieldBizCat.inputView = pickerView  }  // returns the number of 'columns' to display. func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int{     return 1 }  // returns the # of rows in each component.. func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int{     return bizCat.count }  func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {     return bizCat[row] }  func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) {     textfieldBizCat.text = "\(bizCat[row])"  } 
like image 513
TimberWebDesign Avatar asked Nov 08 '14 16:11

TimberWebDesign


2 Answers

If I understood well your question, you want:

  1. Have an UITextField which display a text selected
  2. Opening a picker when the user click on the UITextField
  3. Close the picker when an item (in the picker) is selected, and set it in the UITextField

This is the complete code to manage it, you just have to link the delegate of your UITextField:

@IBOutlet var textfieldBizCat: UITextField! @IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()  var bizCat = ["Cat One", "Cat Two", "Cat Three"]   override func viewDidLoad() {     super.viewDidLoad()     pickerBizCat.hidden = true;     textfieldBizCat.text = bizCat[0] }  // returns the number of 'columns' to display. func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int{     return 1 }  // returns the # of rows in each component.. func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int{     return bizCat.count }  func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {     return bizCat[row] }  func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) {     textfieldBizCat.text = bizCat[row]     pickerBizCat.hidden = true; }  func textFieldShouldBeginEditing(textField: UITextField) -> Bool {     pickerBizCat.hidden = false     return false } 

What I changed from your code:

  • Used UITextFieldDelegate to display the picker when the UITextField is selected
  • Hide the picker once an item is selected, and setup the UITextField
  • Set the first row of your picker in the UITextField when any item is selected
like image 54
tbaranes Avatar answered Jan 04 '23 21:01

tbaranes


How about in your didSelectRow method you resignFirstResponder?

func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) { textfieldBizCat.text = bizCat[row] pickerBizCat.resignFirstResponder() } 
like image 23
Tim Denison Avatar answered Jan 04 '23 21:01

Tim Denison