Как получить уведомление о всплывающем представлении в UINavigationController? - PullRequest
7 голосов
/ 09 марта 2011

Я хочу выполнить действие, когда пользователь нажал кнопку «Назад» на моем UINavigationController, когда достиг определенного значения UIViewController.

К сожалению, похоже, что UINavigationControllerDelegate не имеет никаких способов получать уведомления о совмещении просмотров.

В качестве обходного пути я теперь использую в методе viewDidDisappear мое действие, которое запускается только тогда, когда animated равно YES. Это работает, но немного уродливо.

Как мне сделать это правильно?

Ответы [ 4 ]

19 голосов
/ 26 марта 2014

Самый популярный способ обработки всплывающих окон из контроллера навигационного представления (а также из модального режима) - реализация viewWillDisappear для вашего контроллера представления.

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if (self.isMovingFromParentViewController || self.isBeingDismissed) {
        // This view controller is being popped or dismissed
    }
}
4 голосов
/ 25 октября 2011

Если у вас есть ссылка на контроллер в стеке, тот, который будет отображаться при извлечении, вы можете зарегистрироваться в качестве делегата и проверить его через

navigationController:willShowViewController:animated:
0 голосов
/ 23 декабря 2014

вы можете наблюдать за UINavigationControllerDelegate и проверить, произойдет ли переход:

- (void)navigationController:(UINavigationController *)navigationController
          willShowViewController:(UIViewController *)viewController
                        animated:(BOOL)animated
    {
        if([navigationController.viewControllers containsObject:self])
        {
            NSLog(@"push");
        }
        else
        {
            NSLog(@"pop");
        }
    }
0 голосов
/ 28 июня 2011

Вы можете либо вызвать метод делегата, когда viewWillDisappear, либо установить логику для viewWillAppear для определенного UIViewController.

...