电子邮件,密码,名称的UITextField验证

时间:2013-11-05 22:49:00

标签: ios iphone objective-c validation uitextfield

我正在我的应用程序中开发注册功能。我有一些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的布尔值吗?

谢谢

1 个答案:

答案 0 :(得分:2)

textFieldDidEndEditing:委托方法中进行验证。只要焦点离开文本字段,就会调用此方法。

您甚至可以在textFieldShouldEndEditing:委托方法中执行此操作。如果它无效,您可以返回NO,用户将无法保留无效的文本字段。