UIAlertView не должен вызывать popViewControllerAnimated
У меня есть представление с некоторыми UITextViews. Пользователь может ввести личные данные, имя, фамилию, адрес электронной почты и т. Д. Когда редактирование завершено, пользователь нажимает "Готово" в верхнем правом углу, и представление возвращается к предыдущему виду, например так:
- (void)save:(id)sender
{
[self.view.window endEditing:YES];
if (self.data ...)
{
[self updateUser];
[self.navigationController popViewControllerAnimated:YES];
}
}
Клиент попросил добавить некоторые проверки на некоторых полях, например, по электронной почте. После проверки UIAlertView сообщает, что ввод данных был недействительным, поэтому данные не сохраняются. Моя проблема заключается в том, что кнопка "ОК" AlertView вызывает метод "save", вызывается navigationController и вызывается popViewControllertAnimated.
Проблема здесь заключается в том, что я хотел бы после UIAlertView избежать автоматической навигации к предыдущему представлению (через popViewControllerAnimated), а точнее, я бы хотел остаться в моем редактируемом представлении и ввести новое действительное электронное письмо.
Код для просмотра предупреждений
- (void)alertInvalid {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:NSLocalizedString(@"res_CurrentPasswordErrorAlert",nil)
delegate:nil cancelButtonTitle: NSLocalizedString(@"res_OK",nil) otherButtonTitles:nil];
[alertView show];
}
который вызывается через -(BOOL)textFieldShouldEndEditing:(UITextField *)textField
метод. Итак, как мне изменить мой код для того, чтобы после предупреждающего сообщения текущий UITextView снова стал отзывчивым?
1 ответ
Вы хотите использовать UIAlertViewDelegate.
Вот ссылка:
Но суть в том, что вы будете реализовывать этот метод:
- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex
Поэтому, когда вы реализуете это, проверьте индекс кнопки. Основываясь на индексе, вы можете контролировать, что будет дальше в вашей логике.
Когда вы создаете экземпляр UIAlertView, обязательно установите делегат следующим образом:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""
message:NSLocalizedString(@"res_CurrentPasswordErrorAlert",nil)
delegate:self // this is the key!
cancelButtonTitle:NSLocalizedString(@"res_OK",nil)
otherButtonTitles:nil];