У меня есть приложение с полем имени пользователя и пароля. Я хочу проверить ввод, прежде чем пользователю будет разрешено прекратить редактирование поля. Для этого я использую метод делегата 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;
}
}