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

Dav*_*las 1 cocoa-touch uitextfield uikeyboard uitextfielddelegate

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

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

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

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

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

Dav*_*las 6

我发现了这个问题.

我必须在resignFirstResponder中textfieldShouldReturn然后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;    
}
Run Code Online (Sandbox Code Playgroud)