UINavigation's rejectViewControllerAnimated метод, вызываемый при закрытии UIAlertController

У меня возникла проблема с пониманием, как работают контроллеры представлений iOS и контроллеры предупреждений в конкретном случае:

У меня есть пользовательский UINavigationController в котором есть мой UIViewController . Мой диспетчер навигации переопределил dismissViewControllerAnimated:completion . Из этого UIViewController я представляю новый UIAlertController . До того момента, когда пользователь нажимает любую кнопку в предупреждении, все работает нормально. Тем не менее, странная часть заключается в том, что мой пользовательский метод dismissViewControllerAnimated:completion метод UINavigationController dismissViewControllerAnimated:completion (я не хочу, если это возможно …)

Предупреждение представлено в регулярном порядке (от UIViewController в UINavigationController):

 UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"yep" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [self takeOrder:data]; }]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"nope" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [confirmOrderAcceptAlert addAction:okAction]; [confirmOrderAcceptAlert addAction:cancelAction]; [self presentViewController:alert animated:YES completion:nil]; 

Есть ли возможность предотвратить это поведение? Почему это происходит в первую очередь?

EDIT: Код для dismissViewControllerAnimated:completion :

 - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { self.isHeroEnabled = NO; [super dismissViewControllerAnimated:flag completion:completion]; } 

Я использую библиотеку Hero для анимации переходов, не так ли?

Поскольку вы подклассифицируете UINavigationController, это определенно вызовет функцию rejectViewControllerAnimated: завершение.

Чтобы избежать нарушения кода библиотеки, проверьте определенные типы ViewController.

Например:

 - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { if(![self.visibleViewController isKindOfClass:[UIAlertController class]]){ self.isHeroEnabled = NO; } [super dismissViewControllerAnimated:flag completion:completion]; } 

Вот как работает UINavigationController

Если вы не хотите устанавливать этот HeroEnabled для действий, вызванных из-за предупреждений. Возможно, вам придется сделать что-то вроде

if(![self.visibleViewController isKindOfClass:[UIAlertController class]]) { self.isHeroEnabled = NO }

  • Сделать расчет временных интервалов в - для статуса «приостановлено»
  • UISearchController не будет соблюдать скрытую строку состояния, когда панель поиска имеет фокус
  • iOS Swift 'Не удалось найти элемент executeFetchRequest'
  • NSArray: обнаружение и удаление ненужных объектов (файлов)
  • Где я могу получить категорию GGLContext + Analytics, необходимую для Google Analytics
  • Заголовок AFNetworking 2.0 Content-Type не отправляется при вызове POST
  • Изменение ориентации устройства при наличии уведомления нарушает пользовательский интерфейс
  • Как я могу изменить язык отображаемой UIKeyboard из моего iPhone-приложения?
  • UILongPressGestureRecognizer координаты печати
  • UIButton нажал параметры передачи?
  • Objective-C для вытаскивания модели USB iDevice и данных версии iOS
  • Давайте будем гением компьютера.