Кнопка возврата UINavigationController не всплывает к предыдущему VC

У меня есть проблема, похожая на этот вопрос, но по другой причине она появляется.

У меня есть навигационный контроллер с представлениями A>B>C>D>E.

В CI нажмите на D, в котором пользователи "создают новый сеанс". Иногда пользователи хотят добавить детали к этому новому сеансу, поэтому они нажимают добавить детали, которые выдвигаются к E.

Когда они не хотят добавлять детали, они нажимают "сделано" на D, я звоню [navControler popViewControllerAnimated:YES]; и они заканчивают в C без проблемы, упомянутой в вопросе выше, означая, что если на C они нажимают назад, он успешно переходит к B. Однако, когда они действительно добавляют детали, они переходят к E, и когда они заканчивают, они нажимают кнопку nav ctrl кнопка. В этот момент я добавил этот код, чтобы вернуть их в C:

    NSArray *allViewControllers = [[self navigationController] viewControllers];
    for (UIViewController *aViewController in allViewControllers) {
        if ([aViewController isKindOfClass:[TSessionMgmtViewController class]]) {
            [self.navigationController popToViewController:aViewController animated:NO];
        }
    }

В конечном итоге они возвращаются в C, но когда они нажимают кнопку "Назад" на C, он выполняет странную анимацию спины, но снова оказывается на C. Затем повторное нажатие возвращает их обратно к B.

Я уже проверил следующее: я не звоню дополнительно notifications которые вызывают дополнительный C, чтобы быть выдвинутым. Я не нажимаю C любым другим способом, я проверил стек контроллера Nav с помощью NSLog(@"nav controller stack: %@", [[self navigationController] viewControllers]); и это не показывает дополнительный C в стеке.

Так это проблема с самой кнопкой возврата на C? Или есть какой-то невидимый контроллер представления C, который есть, но не отображается при печати стека?

Большое спасибо заранее!

1 ответ

Вы спрашиваете у контроллера навигации список vcs, но при первом вызове pop они меняются! Вы должны просто выбрать один, чтобы поп к. Или используйте подкласс nav cont и добавьте к нему логику, чтобы, когда вы просто вставляете верхний контроллер, тот, что находится под ним (в его viewWillAppear), мог запросить, чтобы увидеть, что он должен делать.

Другие вопросы по тегам