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している場所を検証できませんUITextFieldUITextFieldつまり、キーパッドのリターンキーを押す前に次をクリックすると、次を入力でき、呼び出されることは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 に答える