Кнопка возврата 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), мог запросить, чтобы увидеть, что он должен делать.