У меня проблема, похожая на this question, но с другой причиной.UINavigationController back button не подходит к предыдущему VC
У меня есть контроллер навигации с видами A> B> C> D> E.
В C Я нажимаю на D, в котором пользователи «создают новую сессию». Иногда пользователи хотят добавить детали к этому новому сеансу, поэтому они нажимают кнопку добавления, которая нажимает на E.
Когда они не хотят добавлять детали, они нажимают «done» на D, я вызываю [navControler popViewControllerAnimated: YES] ; и они заканчиваются на C без проблемы, упомянутой в вопросе выше, то есть, если на C они нажимают назад, он успешно переходит к B. Однако, когда они добавляют детали, они переходят к E, и когда они заканчиваются, они нажимают кнопку назад 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.
Я уже проверил следующее: Я не вызываю дополнительных уведомлений, которые вызывают добавление дополнительного C. Я не нажимаю C каким-либо другим способом Я проверил стек навигационного контроллера с NSLog (@ "контроллер контроллера:% @", [[self navigationController] viewControllers]); и он не показывает дополнительный C в стеке.
Так что это проблема с самой задней кнопкой на C? Или есть какой-то невидимый контроллер вида C, который есть, но не отображается при печати стека?
Большое спасибо!
Где вы добавляли код, который вы опубликовали? Вы не должны изменять поведение кнопки «Назад», если это то, что вы сделали - оно предназначено только для возврата к предыдущему контроллеру, оно не должно пропускать контроллер. Если вы хотите перейти непосредственно с E на C, у вас должна быть специальная кнопка для этого. – rdelmar
@rdelmar Я добавил его в viewWillDisappear of E. – roro
Как я уже сказал в своем комментарии, вы не должны изменять поведение кнопки «Назад» - пользователи ожидают, что они вернут им один контроллер, а не два. Я бы добавил пользовательскую кнопку (в E), чтобы заменить кнопку «Назад», и добавить код, который вы отправили, в свой метод действия, а не поместить его в viewDidDisappear. Я думаю, что это должно сработать. – rdelmar