用户点击 UIKeyboard 中的完成按钮时未调用 textFieldShouldEndEditing

Posted

技术标签:

【中文标题】用户点击 UIKeyboard 中的完成按钮时未调用 textFieldShouldEndEditing【英文标题】:textFieldShouldEndEditing not called when user taps Done Button in UIKeyboard 【发布时间】:2012-04-16 07:21:32 【问题描述】:

我在 textfieldShouldEndEditing 委托方法中对 UITextField 进行验证,因此每次我更改正在编辑的 UITextfield 时都会调用该方法并执行验证。

键盘的返回按钮配置为完成按钮。当按下它时,我会处理输入,但上次编辑的 UItextField 的 textfieldShouldEndEditing 之前从未被调用过,因此它未被验证。

这对我来说似乎很奇怪,因为正常行为是用户在输入字段中的最后一个字符后点击完成按钮,但这不会触发textFieldShouldEndEditing方法。

为此,我必须在 textfieldShouldReturn 方法中再次强制验证。

也许我错过了一些观点,因为我找不到其中的逻辑。

【问题讨论】:

【参考方案1】:

我找到了问题。

我必须在textfieldShouldReturn中辞职FirstResponder,然后textfieldShouldEndEditing被调用。

这是我的方法。我有两个 UITextFields。 self.username是其中一个的 IBOutlet,返回按钮配置为 NEXT。 self.password是其他 IBOutlet 指向带有完成返回按钮的 UITextField。

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField

    if (textField == self.userName) 
        return [self validateUserName:textField.text];

    



    if (textField == self.password) 
        return [self validatePassword:textField.text];

    

    //No hay errores de validación
    return YES;    



-(BOOL)textFieldShouldReturn:(UITextField *)textField

    //In userName return is Next
    //In password return is Done

    if (textField == self.userName) 
        [self.password becomeFirstResponder];
     
    [textField resignFirstResponder];
    return YES;    

【讨论】:

以上是关于用户点击 UIKeyboard 中的完成按钮时未调用 textFieldShouldEndEditing的主要内容,如果未能解决你的问题,请参考以下文章

UIKeyboard 返回按钮操作不同于 UITextView resignFirstResponder

未调用以编程方式添加的按钮操作

解雇 UIKeyboard 在 Objective-C 中不起作用

在不禁用用户交互的情况下阻止 UIWebView 输入显示 UIKeyboard

为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?

当我在 UITextField 中快速点击时,为啥 UIKeyboard 不出现?