0

我正在我的应用程序中开发注册功能。我有一些UITextFields像电子邮件、密码、用户名、名字......我想在我向服务器发出请求之前验证它们的信息。现在我在关闭键盘时验证它们:

  -(BOOL) textFieldShouldReturn:(UITextField *)textField{

          if (textField == emailTextField)
        {
            if(emailTextField.text.length > 5){
                if(![self validateEmailWithString:emailTextField.text])
                {
                    // user entered invalid email address
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
 message:@"Enter a valid email address." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
                    [alert show];
                    return NO;
                    //email.text=@"";
                } else {
                    [self.emailDelegate sendEmailForCell:emailTextField.text];
                    [textField resignFirstResponder];
                    return YES;

                }
            } else {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Email address too Short" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
                [alert show];

                return NO;
            }
        }
        return YES;
    }


    - (BOOL) validateEmailWithString:(NSString *)emailStr
    {
       NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
             return [emailTest evaluateWithObject:emailStr];
    }

但是,当我不使用textFieldShouldReturn方法关闭键盘时,我无法验证UITextField我输入的位置。UITextField我的意思是,当我在按键盘上的返回键之前单击下一个时,我可以输入下一个UITextField并且textFieldShouldReturn从未被调用过。

所以,我想我应该使用这种方法——(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string但我不想在用户每次输入字母时都向用户表明它是无效的电子邮件(或通行证,或其他)。

所以,我的问题是当用户停止在键盘上输入字母但在他关闭键盘之前,我该如何管理这个验证?

另一个问题。我可以将这个方法的布尔值存储在一个变量中shouldChangeCharactersInRange吗?

谢谢

4

1 回答 1

2

textFieldDidEndEditing:委托方法中进行验证。每当焦点离开文本字段时都会调用此方法。

你甚至可以在textFieldShouldEndEditing:委托方法中做到这一点。如果它无效,您可以返回 NO,并且用户将无法离开无效的文本字段。

于 2013-11-05T22:53:34.667 回答