Подтвердить что ты не робот

Могу ли я узнать в viewWillAppear, что он был вызван после нажатия popController pop (кнопка возврата)?

Скажем, у меня есть UIViewController A и B. Пользователь переходит с A на B с помощью push-сегмента. Чем пользователь нажимает кнопку "Назад" и переходит к "A".

Теперь вызывается viewWillAppear из A. Могу ли я узнать в коде здесь, что я пришел с задней кнопки (navigationController popTo...), а не по-другому? И без написания специального кода в контроллере B.

4b9b3361

Ответ 1

hm, возможно, вы можете использовать self.isMovingToParentViewController в viewWillAppear, см. docs, если это NO, то это означает, что текущий контроллер представления уже включен стек навигации.

Ответ 2

Мне нравится делать следующее: контроллер A:

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

    if (_popping) {
        _popping = false;
        NSLog(@"BECAUSE OF POPPING");
    } else {
        NSLog(@"APPEARING ANOTHER WAY");
    }

    //keep stack size updated
    _stackSize = self.navigationController.viewControllers.count;

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

    _popping = self.navigationController.viewControllers.count > _stackSize;

    ....
}

Что вы делаете, так это отслеживание того, исчезает ли ваш контроллер вида (A), потому что контроллер вида (B) толкается или по другой причине. Затем (если вы не изменили порядок контроллера дочернего представления), он должен точно сказать вам, появляется ли (A) из-за поп-музыки на навигационном контроллере.

Ответ 3

Добавьте свойство BOOL в UIViewController A:

@property (nonatomic) BOOL alreadyAppeared;

Затем в вашем методе viewWillAppear: добавьте:

if (!self.alreadyAppeared) {
    self.alreadyAppeared = YES;
    // Do here the stuff you wanted to do on first appear
}