Как правильно реализовать контроллер панели вкладок с контроллером навигации
Я использую Storyboard и Xcode 6. У меня есть следующие контроллеры и сцены в моей раскадровке:
UINavigationController
который имеет HomeViewController
как корень. HomeViewController
есть кнопка, которая Show (e.g. Push)
UITabBarController
, UITabBarController
имеет 4 UIViewControllers
,
Но моя проблема в том, что после того, как я покажу UITabBarController
в 4 нет навигационных баров UIViewControllers
, Но я предположил, что если я Show (e.g. Push)
UITabBarController
тогда он должен иметь встроенный навигационный контроллер, который является начальным контроллером в раскадровке. Я прав? И если да, то как я могу настроить тогда панель навигации в раскадровке, потому что теперь в панели вставленных вкладок есть событие панели по умолчанию, которое я вижу на раскадровке. Я выбрал UIViewController и установил смоделированные метрики в инспекторе идентичности для Полупрозрачной панели навигации для свойства Top, но я предполагал, что он должен автоматически добавляться в этот контроллер и на панель вкладок без дополнительных шагов.
Или я должен добавить новый контроллер навигации для каждого элемента панели вкладок, который будет иметь свои корневые контроллеры представления?
Основной вопрос, почему я не вижу навигационную панель в раскадровке с помощью show (например, Push). Например, если я добавляю контроллер навигации и затем устанавливаю в качестве контроллера панели корневых вкладок, тогда XCode автоматически добавляет верхнюю панель навигации, но если в очереди есть дополнительный шаг, как в моем случае HomeViewController, верхняя панель навигации никогда не появляется автоматически.
3 ответа
Привет вам нужно встроить каждый контроллер представления, который находится в панели вкладок в свой собственный контроллер навигации. Так что процесс выглядит так (HomeVC встроен в собственный NavController):
/ --> `NavController` --> `ViewController1`
| --> `NavController` --> `ViewController2`
`HomeViewController`-->`TabBarController`|--> `NavController` --> `ViewController3`
\--> `NavController` --> `ViewController4`
- Зайдите в Редактор -> Внедрить -> Контроллер панели вкладок (или Контроллер навигации)
Чтобы ответить на ваши вопросы:
Каждая вкладка интерфейса контроллера панели вкладок связана с пользовательским (различным [sic]) контроллером представления. Когда пользователь выбирает конкретную вкладку, контроллер панели вкладок отображает корневое представление соответствующего контроллера представления, заменяя любые предыдущие представления.
Таким образом, Root View Controller вкладки должен быть присоединен к Navigation Controller; контроллер представления навигации должен быть следующим встроенным, чтобы контроллер представления мог наследовать навигацию. Панель вкладок переключает представления на все, что находится рядом.
Этот документ поможет изложить больше информации об этом. https://developer.apple.com/documentation/uikit/uitabbarcontroller
В Swift 2 Xcode 7 имеет очень удобную функцию для добавления UINavigationController:
Если вы хотите что-то подобное:
TabBarController -> Navigation Controller -> View Controller with a Table View -> and from the TableView a MasterDetailView
например:
У меня была проблема, что не было никакой Навигации в MasterDetailView (нет кнопки Back to ViewController с The TableView).
Обходной путь это:
Установите Segue между TableView и MasterDetailView в: Kind: Push (устарело)
Запустите ваше приложение... надеюсь, вы увидите кнопку "Назад"... измените вид на Show (e.g. Push)
, запустите снова -> это должно работать.