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.

Вот ссылка:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html

Но суть в том, что вы будете реализовывать этот метод:

  • (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];
Другие вопросы по тегам