Будем бросать старый ответ, чтобы обновить его, чтобы он был более полным.
Для решения этого вопроса:
Может ли кто-нибудь объяснить иерархию навигации и как программно пройти цепочку назад?
Структура вашей навигации:
tabbarVC -> navigationVC-1 -> tableVC-1 - (посредством перехода по нажатию) -> tableVC-2 - (посредством перехода по модалу) -> навигацияVC-2 -> tableVC-3
Можно объяснить так:
TabbarVC показывает свой «selectedViewController» (navigationVC-1).
NavigationVC-1 имеет свой стек навигации, состоящий из TableVC-1 и TableVC-2 (topViewController of NavigagtionVC-1)
Затем NavigationVC-2 представляется Модально через tabbarVC, поэтому tabbarVC - это presentingViewController
, а NavigationVC-2 - это presentedViewController
.
Таким образом, чтобы получить доступ к таблице VC-2 из таблицы VC-3, вам нужно сделать что-то вроде этого:
[(UINavigationController *)[(UITabBarController *)[tableVC-3 presentingViewController] selectedViewController] topViewController];
(не делайте этого в рабочем коде)
[tableVC-3 presentingViewController]
и [tableVC-3.navigationController presentingViewController]
вернут вам UITabBarController
.
Если вы используете UINavigationController , вы должны использовать его push
и pop
для включения или выключения UIViewController в «стеке презентаций».
Вы сможете получить доступ к UINavigationController
из этих UIViewController
следующим образом:
self.navigationController
Если вы хотите вернуться более чем на один UIViewController
в «стеке презентаций», вы можете использовать этот метод на UINavigationController
popToViewController: анимированные:
Выводит контроллеры представления, пока указанный контроллер представления не окажется на вершине стека навигации.
- (NSArray *) popToViewController: (UIViewController *) viewController animated: (BOOL) animated
Чтобы отклонить UIViewController , который был представлен модально, UIViewController
, который представил его, нужно отклонить его с помощью:
- (void)dismissModalViewControllerAnimated:(BOOL)animated
Так что в этом случае должно быть:
[tableVC-2 dismissModalViewControllerAnimated:YES];