UITabBarController и UINavigationController Взаимодействие - PullRequest
1 голос
/ 03 октября 2010

У меня есть приложение с панелью вкладок с двумя вкладками. На одной вкладке отображается UINavigationController, а на другой - пользовательский интерфейс UIViewController.

Что я заметил, так это то, что если переключать вкладки на вкладку UINavigationController, то переходить на несколько уровней в UITableViews, если я нажимаю на текущую вкладку на UITabBar, UINavigationController открывается в своем корневом представлении. 1005 *

Мне было интересно, как это происходит. Не похоже, что UINavigationController является делегатом UITabBar или UITabBarController, который был бы одним из вариантов. Функциональность как-то автоматическая.

Я хочу реализовать аналогичное действие для моего UIView во второй вкладке, поэтому я хотел бы выяснить это. Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Что делает UITabBarController, так это то, что всякий раз, когда вы нажимаете на уже выбранную вкладку, он проверяет, является ли UIViewController этой вкладки UINavigationController.Если это так, то зайдите в rootViewController.

То, что вы хотите сделать, - это установить для вас вторую вкладку делегата вашего UITabBarController и проверить наличие

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

Когда этот метод срабатывает, проверьте, является ли viewControllerваша вторая вкладка viewController и значение selectedIndex (из UITabBarController) равно 1. Если это так, выполните ваше действие.

Это работает только на iOS 3.0 или более поздней версии.В версиях iOS до версии 3.0 этот метод вызывается только в том случае, если выбранный контроллер представления действительно изменяется.

1 голос
/ 03 октября 2010

Это на самом деле отличный вопрос, я никогда не замечал такого поведения до сегодняшнего дня. Я быстро догадался об этом, и после некоторого тестирования я, кажется, был прав: поскольку ваш TabBarController знает, что его вкладка содержит UINavigationController, он просто вызывает popToRootViewControllerAnimated: метод NavigationController. Я проверил это, создав категорию, которая перезаписывает метод popToRootViewControllerAnimated: (что, конечно, вы не должны делать в своем приложении) и вуаля, этот метод фактически называется. Это отвечает на ваш вопрос о "как". Если вы можете подумать, как воспроизвести это в вашем ViewController, я дам вам знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...