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