UITextField-捕获返回按钮事件


Answers:


212
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

不要忘记在演示图板中设置代表...

在此处输入图片说明


47
确保将视图控制器设置为文本字段的委托。
zekel 2011年

1
谢谢。对我来说,我通过设置了代表self.yourTextField.delegate = self;。甚至多个文本字段也可以使用。
haxpor

@Praxiteles现在可以在情节提要中完成此操作,而无需委托,请检查下面的答案。
布莱克·洛克利

51

不需要委派,这是一个单行代码:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

令人遗憾的是,您无法在情节提要中直接执行此操作(您无法将动作连接到在情节提要中将其发出的控件),但是可以通过中间动作来做到这一点。


1
我只想指出,UIControlEventEditingDidEndOnExit仅当textFieldShouldReturn:委托方法返回YES 时才发送事件(无需事先退出文本字段)。
alex-i

你不具备实现委托。但是也许您必须返回YES此方法。
mxcl

9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

在enterPressed()函数中,将您要执行的所有行为

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}

8

现在,您可以使用发送的事件“退出时结束”在情节提要中执行此操作。

在您的视图控制器子类中:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

在情节提要中,找到所需的文本字段:

在此处输入图片说明


现在,这是正确的答案。
Psiloc

3

使用UITextFieldDelegate的Swift版本:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}

2

迅捷5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.