2013-11-05 9 views
0

Я разрабатываю функцию регистрации в своем приложении. У меня есть UITextFields, такие как электронная почта, пароль, имя пользователя, имя ... и я хочу проверить их до того, как я сделаю запрос на сервер с информацией. Теперь я проверить их, когда я закрыть клавиатуру, делая это:Проверка UITextField для электронной почты, пароля, имени

-(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 protected]""; 
       } 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._%+-][email protected][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, но я не хочу показывать пользователю, что это недействительный адрес электронной почты (или пропуск или что-то еще) каждый раз, когда он набирает письмо.

Итак, мой вопрос: как я могу управлять этой проверкой, когда пользователь перестает печатать буквы на клавиатуре, но прежде чем закрыть клавиатуру?

Другой вопрос. Могу ли я сохранить в переменной Boolean этого метода shouldChangeCharactersInRange?

Спасибо

ответ

2

Выполните проверку в методе textFieldDidEndEditing: делегата. Это называется в любое время, когда фокус оставляет текстовое поле.

Вы можете даже сделать это в методе делегата textFieldShouldEndEditing:. Если он недействителен, вы можете вернуть НЕТ, и пользователь не сможет оставить недопустимое текстовое поле.

+0

Но с 'textFieldShouldBeginEditing' Как пользователь не может покинуть это текстовое поле? Я попытался с помощью этого метода http://stackoverflow.com/questions/7707906/how-to-check-if-uitextfields-text-is-valid-email, и он не работает – croigsalvador

+0

@RoxeeMan Упс - это была копия/вставить ошибку. Я исправил ответ - он должен был быть «ShouldEnd», а не 'ShouldBegin'. Благодарю. – rmaddy

+0

Я хотел сказать с 'shouldChangeCharactersInRange', как в моей ссылке. Когда я пытаюсь, это не работает. Я не знаю, что делать с возвращаемой переменной. Или как управлять им. Теперь я попытаюсь показать действительный или недопустимый ярлык. Когда я оставляю 'UITextField'' textFieldDidEndEditing' или 'textFieldShouldEndEditing' Но я бы хотел, чтобы вы знали, как использовать' shouldChangeCharactersInRange' – croigsalvador

Смежные вопросы