【问题标题】:UITextField validation for email, password, name电子邮件、密码、姓名的 UITextField 验证
【发布时间】:2013-11-17 00:19:50
【问题描述】:

我正在我的应用中开发注册功能。我有一些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 时,我可以输入下一个UITextFieldtextFieldShouldReturn 从未被调用过。

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

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

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

谢谢

【问题讨论】:

    标签: ios iphone objective-c validation uitextfield


    【解决方案1】:

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

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

    【讨论】:

    • 但是,textFieldShouldBeginEditing 用户怎么不能离开那个文本字段呢?这个方法stackoverflow.com/questions/7707906/…试过了,不行
    • @RoxeeMan 哎呀——这是一个复制/粘贴错误。我修正了答案——它应该是ShouldEnd,而不是ShouldBegin。谢谢。
    • 我想在我的链接中用shouldChangeCharactersInRange 说。当我尝试它不起作用时。我不知道该怎么做返回的变量。或者如何管理它。现在,我将尝试显示一个有效或无效的标签。当我通过textFieldDidEndEditingtextFieldShouldEndEditing 离开UITextField 但我想知道如何使用shouldChangeCharactersInRange
    • 感谢您的回答。这是对我来说最好的方法之一
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 2021-11-21
    • 2021-10-13
    • 2015-11-14
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多