UIAlertView не должен вызывать popViewControllerAnimated

У меня есть представление с некоторыми UITextViews. Пользователь может ввести данные о человеке, имя, фамилию, адрес электронной почты и т. д. Когда редактирование завершено, пользователь нажимает «Готово» в правом верхнем углу, и представление переходит к предыдущему представлению следующим образом:

- (void)save:(id)sender
{

    [self.view.window endEditing:YES];

    if (self.data ...)
    {
        [self updateUser];
        [self.navigationController popViewControllerAnimated:YES];
    }

}

Клиент запросил добавить некоторую проверку в некоторые поля, например, электронную почту. После проверки UIAlertView сообщает, что ввод данных недействителен, поэтому данные не сохраняются. Моя проблема в том, что кнопка OK в AlertView вызывает метод «сохранить», вызывается 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 снова стал реагировать?


person cateof    schedule 15.07.2014    source источник
comment
Что настроено в ваших методах делегата alertView. Вы должны вызывать свой метод сохранения в одном из них.   -  person Popeye    schedule 15.07.2014
comment
Используйте метод UIAlertView Delegate.   -  person Toseef Khilji    schedule 15.07.2014
comment
Вы должны перемещаться в представлении по методу удаления :dismissWithClickedButtonIndex или : clickedButtonAtIndex (UIAlertView).   -  person iBhavin    schedule 15.07.2014
comment
поставить точку останова на этой строке кода [self.navigationController popViewControllerAnimated:YES];   -  person Arun    schedule 15.07.2014


Ответы (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];
person joelg    schedule 15.07.2014
comment
Какой код нам нужен в clickedButtonAtIndex? Я просто хочу оставаться в одном представлении с первым ответчиком UITextView. - person cateof; 15.07.2014
comment
Код, который вам нужен в clickedButtonAtIndex, полностью зависит от того, что вы хотите сделать. Вы можете включить параметр buttonIndex, а затем соответствующим образом закодировать свою логику. - person joelg; 15.07.2014