Не удается установить заголовок UINavigationBar или поместить кнопки UIB в панель UINavigationBar при наличии кнопки «Назад» - PullRequest
0 голосов
/ 12 мая 2019

Я занимаюсь разработкой приложения, которое будет иметь несколько вложенных UIViewControllers.У меня есть два представления, одно из которых является корневым контроллером представления с uibarbuttonitem, с подключенным к другому UIViewController.

UIViewController, который был получен, не принимает и UIButtons или UIBarButtonItems, и я не могу установитьзаголовок к нему.

The Storyboard

Мне нужно поместить заголовок и другие элементы UIE в UINavigationBar, но, похоже, ничего не работает, и я не нашел никаких решенийонлайн.

UINavigationBar даже не отображается в иерархии представления.

Hierarchy

Спасибо за сотрудничество.

1 Ответ

1 голос
/ 12 мая 2019

Ты прав. Макет раскадровки является непоследовательным и запутанным в случае ViewControllers в стеке NavigationController. Первый предлагает прямой доступ к NavigationItem, но позже нет. Я полагаю, это потому, что существует только один NavigationItem, и его нужно динамически обновлять, когда ViewControllers выдвигаются и выталкиваются.

Способ справиться с этим - сделать это в коде. При нажатии ViewController его свойство title используется для установки заголовка на панели навигации. Итак, в каждом из ваших ViewController, которые находятся в стеке NavigationController, установите его title в viewDidLoad:

self.title = "titleForThisVC"

Для rightBarButton вы также добавляете его программно. Если это ваш @IBAction для кнопки:

@objc func handleRightBarButton() {
    print("right button")
}

тогда вы добавите кнопку следующим образом (снова в viewDidLoad):

self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Foo", style: .plain,
     target: self, action: #selector(handleRightBarButton))

Последний получил за UITabBarController с

Если ваши NavigationControllers являются потомками UITabBarController, тогда заголовок, который используется на панели вкладок, получит заголовок из первого ViewController в стеке, как установлено кодом, но только после того, как эта вкладка будет первой был получен доступ. Чтобы обойти это, свойство title также должно быть установлено для верхних ViewControllers в Инспекторе атрибутов в Интерфейсном Разработчике

...