UIPickerView - 1st row selection does not call didSelectRow

前端 未结 5 983
我寻月下人不归
我寻月下人不归 2020-12-09 09:46

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

5条回答
  •  萌比男神i
    2020-12-09 10:17

    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
    }
    

提交回复
热议问题