当用户点击UIKeyboard中的Done Button时,不会调用textFieldShouldEndEditing

时间:2012-04-16 07:21:32

标签: cocoa-touch uitextfield uikeyboard uitextfielddelegate

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

键盘的返回按钮配置为完成按钮。当它被按下时我处理输入,但之前从未调用过最后编辑过的UItextField的textfieldShouldEndEditing,所以它没有被验证。

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

为了解决这个问题,我必须在textfieldShouldReturn方法中再次强制验证。

也许我错过了一些观点,因为我找不到这个逻辑。

1 个答案:

答案 0 :(得分:5)

我找到了问题。

我必须在textfieldShouldReturn中使用resignFirstResponder,然后调用textfieldShouldEndEditing

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

-(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;    
}