Проблемы увольнения клавиатуры условно - PullRequest
1 голос
/ 30 марта 2010

У меня есть приложение с полем имени пользователя и пароля. Я хочу проверить ввод, прежде чем пользователю будет разрешено прекратить редактирование поля. Для этого я использую метод делегата textFieldShouldEndEditing. Если ввод не проверяется, я отображаю UIAlertView.

Этот подход работает так, как объявлено - пользователь не может покинуть поле, если ввод не подтвержден.

Чтобы кнопка «Готово» на клавиатуре закрывала клавиатуру, я вызываю resignFirstResponder для текстового поля.

У меня проблема в том, что оповещение вызывается дважды. Как не показывать предупреждение дважды?

редактировать для уточнения

То, что происходит, - это то, что появляется предупреждение, затем появляется другое предупреждение. Затем мне нужно закрыть оба окна, чтобы исправить ввод.

Вот метод textFieldShouldEndEditing

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    NSLog(@"function called %@",textField);
    if([textField.text length] == 0)
    {
        return YES;
    }
    if(textField == userName)
    {
    if([self userNameValidated:textField.text])
    {
        NSLog(@"name validated");
        NSString *tempDonerName = [[NSString alloc] initWithString:(@"%@",userName.text)];
        //[[NSUserDefaults standardUserDefaults] setObject:tempDonerName forKey:@"name"];
        [tempDonerName release];
        return YES;
    } else {
        NSLog(@"name did not validate");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Invalid Username",@"Invalid Username title")
                                                        message:NSLocalizedString(@"Please make sure there are no apostrophes,spaces in the username, and that the username is less than 12 characters",@"Invalid username message")
                                                       delegate:nil
                                              cancelButtonTitle:NSLocalizedString(@"OK",@"OK Text") 
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];            

        return NO;
    }

} else if (textField == userPin) {
    if([self userPinValidated:textField.text])
    {
        NSLog(@"pin validated");
        //NSString *tempDonerPin = [[NSString alloc] initWithString:(@"%@",userPin.text)];              
        //[[NSUserDefaults standardUserDefaults] setObject:tempDonerPin forKey:@"pin"];
        //[tempDonerPin release];
        return YES;
    } else {
        NSLog(@"pin did not validate");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Invalid Password",@"Invalid Pin title")
                                                        message:NSLocalizedString(@"Please make sure there are no apostrophes in the password",@"Invalid password message")
                                                       delegate:nil
                                              cancelButtonTitle:NSLocalizedString(@"OK",@"OK Text") 
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];

        return NO;
    }
}else {
    NSLog(@"code validate - shouldn't get called");
    return YES;
}

}

1 Ответ

0 голосов
/ 31 марта 2010

Оставляя в стороне двойное оповещение: resignFirstResponder будет вызывать textFieldShouldEndEditing, обходного пути нет.Поэтому вам нужно либо передать флаг, говорящий, что это здорово, выйти из поля с непроверенным вводом, либо очистить содержимое другим способом;или принять решение пользователя и активировать кнопку очистки на поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...