Подтвердить что ты не робот

Как правильно реализовать контроллер панели вкладок с навигационным контроллером

Я использую 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, верхняя панель навигации никогда не появляется автоматически.

4b9b3361

Ответ 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), снова запустите → он должен работать.