I have a UIPickerView on my UIView along with a UITextField. I am letting the user select a value from the picker or enter a custom va
To overcome the didSelectRow not getting called in the UIPickerView when the user selected the first item in the list, you can use UITapGestureRecognizer. (Code example in Swift)
self.txtTransType = self.makeTextField(self.transType, placeHolder: "Check-in or Check-out")
self.txtTransType?.addTarget(self, action: "txtTransTypeEditing:", forControlEvents: UIControlEvents.EditingDidBegin)
func makeTextField(text: String?, placeHolder: String) -> UITextField {
var textField = UITextField(frame: CGRect(x: 140, y: 0, width: 220.00, height: 40.00));
textField.placeholder = placeHolder
textField.text = text
textField.borderStyle = UITextBorderStyle.Line
textField.secureTextEntry = false;
textField.delegate = self
return textField
}
func txtTransTypeEditing(sender: UITextField) {
var ttPickerView:UIPickerView = UIPickerView()
ttPickerView.dataSource = self
ttPickerView.delegate = self
sender.inputView = ttPickerView
let recognizer = UITapGestureRecognizer(target: self, action:Selector("handleTransTypePickerTap:"))
recognizer.delegate = self
ttPickerView.addGestureRecognizer(recognizer)
}
func handleTransTypePickerTap(recognizer: UITapGestureRecognizer) {
let ttPickerView = recognizer.view as! UIPickerView
let row = ttPickerView.selectedRowInComponent(0)
self.txtTransType!.text = self.transTypeData[row]
}
Use the following link UIGestureRecognizer Tutorial: Getting Started to get tap recognizer to work (need to add UIGestureRecognizerDelegate) and following code
class TransactionViewController: UIViewController, UITextFieldDelegate,UIPickerViewDataSource,UIPickerViewDelegate, UIGestureRecognizerDelegate { }
func gestureRecognizer(UIGestureRecognizer,
shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool {
return true
}