Определите, было ли отображаемое представление нажато или появилось из кнопки "Назад" на панели навигации

Есть ли способ узнать, появился ли новый контроллер из кнопки навигации или был вставлен в стек? Id нравится перезагружать данные только для нажатия на стек навигации, а не на кнопку "Назад".

Ответы

Ответ 1

Начиная с iOS 5.0 вы можете сделать это:

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

    if (self.isBeingPresented || self.isMovingToParentViewController) {
        // "self" is being shown for the 1st time, not because of a "back" button.
    }
}

Ответ 2

Если ваш push также включает создание экземпляра контроллера представления, поместите свою логику только в режиме viewDidLoad. Он не будет вызван обратно, потому что он уже загружен.

Ответ 3

Вы можете реализовать UINavigationControllerDelegate и переопределить метод `navigationController: didShowViewController: анимированный: '. Затем вам нужно будет проверить возвращаемый контроллер просмотра, чтобы определить, вернулись ли вы с ожидаемого контроллера представления.

- (void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated
{
    if (yourPushedViewController == viewController)
    {
        // Do something
    }
}