Если я правильно понимаю ваш вопрос, вы пытаетесь вернуть контроллер навигации к корневому элементу, когда выбран элемент панели вкладок.
Чтобы сделать это, установите некоторый объект (например, ваш делегат приложения, но это может быть другой объект) в качестве делегата для вашего UITabBarController. (Если вы используете делегат приложения, он будет делегатом для более чем одной вещи, и это нормально.) Затем реализуйте метод tabBarController:didSelectViewController:
. В этом методе сообщите выбранному контроллеру представления (который должен быть NavigationController) вернуться к корневому контроллеру представления.
Как то так. Добавьте эту реализацию в ваш класс AppDelegate.m:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[viewController popToRootViewControllerAnimated:NO];
}
В вашем файле .xib установите делегата для TabBarController равным AppDelegate. (Если вы программно создаете панель вкладок, вам придется делать это там программно.)
Как вы и подозревали, попытка сделать это в методе viewWillAppear
или другом методе контроллера представления, который находится в контроллере навигации, не является правильным подходом. Это метод, выполняемый на контроллере навигации и обнаруженный делегатом панели вкладок.