我在textfieldShouldEndEditing
委托方法中验证UITextField,因此每次更改正在编辑的UITextfield时,都会调用该方法并执行验证。
键盘的返回按钮配置为完成按钮。当它被按下时我处理输入,但之前从未调用过最后编辑过的UItextField的textfieldShouldEndEditing
,所以它没有被验证。
这对我来说似乎很奇怪,因为正常的行为是用户只是在输入字段中的最后一个字符后点击完成按钮,但这不会触发textFieldShouldEndEditing
方法。
为了解决这个问题,我必须在textfieldShouldReturn
方法中再次强制验证。
也许我错过了一些观点,因为我找不到这个逻辑。
答案 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;
}