用户已开始与文本字段交互时的操作

对于 Swift 3.1:

在第一个示例中,你可以看到在编写时如何拦截用户与文本字段交互。类似地, UITextFieldDelegate 中有一些方法在用户启动并结束与 TextField 的交互时被调用。

为了能够访问这些方法,你需要符合 UITextFieldDelegate 协议,并且对于要通知的每个文本字段,将父类指定为委托:

class SomeClass: UITextFieldDelegate {
    
    @IBOutlet var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

}

现在,你将能够实现所有 UITextFieldDelegate 方法。

要在用户开始编辑文本字段时收到通知,你可以实现 textFieldDidBeginEditing(_ :) 方法,如下所示:

func textFieldDidBeginEditing(_ textField: UITextField) {
    // now you can perform some action 
    // if you have multiple textfields in a class, 
    // you can compare them here to handle each one separately
    if textField == emailTextField {
        // e.g. validate email 
    } 
    else if textField == passwordTextField {
        // e.g. validate password 
    } 
}

同样,如果用户已结束与文本字段的交互,则会收到通知,你可以使用 textFieldDidEndEditing(_ :) 方法,如下所示:

func textFieldDidEndEditing(_ textField: UITextField) {
    // now you can perform some action 
    // if you have multiple textfields in a class, 
    // you can compare them here to handle each one separately
    if textField == emailTextField {
        // e.g. validate email 
    } 
    else if textField == passwordTextField {
        // e.g. validate password 
    } 
}

如果要控制 TextField 是否应该开始/结束编辑,可以使用 textFieldShouldBeginEditing(_ :)textFieldShouldEndEditing(_ :) 方法,根据你所需的逻辑返回 true / false。