将TabGestureRecognizer添加到TextField

时间:2018-11-20 19:43:26

标签: swift uitextfield

我所有的UiTextField都是以编程方式创建的,所以我不能只用鼠标右键单击将onTab函数拖到快速文件上。

我试图在文本字段中添加手势识别器,但是现在我必须双击以触发clickTextField()。

// make clickable
let clickName = MyTapGesture(target: self, action: #selector(ViewMain.clickTextField(_:)))
clickName.count_of_selection = String(i)
self.finishName[i].addGestureRecognizer(clickName)

如何做到这一点,使其一键即可使用。也许有其他方法吗?

2 个答案:

答案 0 :(得分:1)

UITextField具有轻击手势。您需要使用它的委托方法:

func textFieldShouldBeginEditing(_ textField: UITextField)
func textFieldDidEndEditing(_ textField: UITextField)
func textFieldShouldEndEditing(_ textField: UITextField)
func textFieldDidBeginEditing(_ textField: UITextField)
func textFielShouldClear(_ textField: UITextField)
func textFielShouldReturn(_ textField: UITextField)

不要忘记

yourTextField.delegate = self

为您的vc创建扩展名后:

extension ViewController: UITextFieldDelegate {
    // here you add the necessary delegate methods for your textFields
}

注意:您不需要实现所有方法。仅使用您需要的那个。可以在AppleDeleveloper上找到更多详细信息。

答案 1 :(得分:0)

尝试为每个UITextField设置一个标记值,以便能够在它们之间进行区分。 例如:

var iter = 0 //Defaults auto-incrementation                                        

let textField = UITextField()
textField.frame =  CGRect(x: 20, y: y, width: Int(UIScreen.main.bounds.width-40), height:50)
textField.placeholder = title + " :"

//Setting the tag            
textField.tag = iter

//Setting the controller as delegate to UITextField
textField.delegate = self

 //AddSubview
 self.view.addSubview(textField)

 //Auto-incrementation
 iter += 1

您还需要利用UITextField委托方法:

//TODO: Declare textFieldDidBeginEdditing here :
    func textFieldDidBeginEditing(_ activeTextField: UITextField) {
                 //Code
}
//TODO: Declare textFieldDidEndEditing here :
func textFieldDidEndEditing(_ activeTextField: UITextField) {
                 //Code
}

根据您的需要,可以使用更多或更少的方法。祝你好运。