Как люди выталкивают свои стеки UINavigationController под UITabBarController? - PullRequest
1 голос
/ 24 марта 2010

У меня есть четыре UINavigationController, назначенных каждому вкладке в UITabBarController. Каждый UINavigationController управляет UIViewController, который сам может разветвляться на другие UIViewController ниже его иерархически.

Мой вопрос в том случае, если пользователь под одной вкладкой перешел к UIViewController, который иерархически НИЖЕ основной UIViewController, управляемый UINavigationController, а затем пользователь открывает другую вкладку и затем возвращается к исходная вкладка, КАК сделать так, чтобы пользователю был представлен основной UIViewController, управляемый контроллером UINavigation? , а не страница, на которой он остановился?

UITabBarController настроен в IB

Ответы [ 2 ]

7 голосов
/ 24 марта 2010

Реализуйте протокол UITabBarControllerDelegate и выскакивайте на корневой контроллер всякий раз, когда ваш делегат получает уведомление о том, что пользователь выбрал другую вкладку.

Что-то вроде:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    [viewController.navigationController popToRootViewControllerAnimated:YES];
}

Приведенный выше код должен появиться в корневом контроллере любого контроллера навигации, который является контроллером основного вида вновь выбранной вкладки. Вы можете попробовать реализовать протокол в своем приложении-делегате. И не забудьте фактически назначить делегата приложения делегатом контроллера панели вкладок.

2 голосов
/ 14 мая 2010

изначально не работал для меня, потом я заметил, что все мои viecontrollers для разных вкладок на самом деле являются UINavigationControllers

и, таким образом, я немного изменил приведенный выше код следующим образом, и он работал:

[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
...