Изменение заголовка навигации программно

У меня есть панель навигации с заголовком. Когда я дважды щелкаю текст, чтобы переименовать его, он фактически говорит, что это элемент навигации, так что это может быть так.

Я пытаюсь изменить текст с помощью кода, например:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

Это не мой код, очевидно, просто показывает, как он будет работать.

Поэтому всякий раз, когда я нажимаю кнопку, я хочу изменить название.

18 ответов

Решение

Вы изменяете заголовок, изменяя заголовок отображаемого контроллера представления:

viewController.title = "some title"

Обычно это делается с точки зрения загрузки на контроллере вида:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

Однако это работает только в том случае, если ваш контроллер представления встроен в UINavigationController. Я настоятельно рекомендую сделать это вместо того, чтобы создавать панель навигации самостоятельно. Если вы настаиваете на создании панели навигации самостоятельно, вы можете изменить заголовок, выполнив:

navigationBar.topItem.title = "some title"

Попробуйте следующее в viewDidLoad

self.navigationItem.title = "Your Title"

Код ниже работает для меня с Xcode 7:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}

Я нашел это, чтобы работать:

navigationItem.title = "Title"

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}

Если у тебя есть NavigationController встроенный в TabBarController Смотри ниже:

super.tabBarController?.title = "foobar"

Вы можете отлаживать подобные проблемы с помощью сценариев отладчика. Попробуйте зубило pvc Команда для печати каждого видимого / скрытого представления в иерархии.

Правильный ответ для людей, использующих swift4 был бы

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}

А также если вы попытаетесь создать Navigation Bar вручную этот код поможет вам

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}

Если вы хотите изменить заголовок дочернего контроллера представления контроллера представления страницы, который встроен в контроллер навигации, он будет выглядеть следующим образом:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

Как правило, наилучшей практикой является установка названия на UIViewController, Делая это, UINavigationItem также установлен. Как правило, это лучше, чем программное распределение и инициализация UINavigationBar это не связано ни с чем.

Вы упускаете некоторые преимущества и функциональность UINavigationBar был разработан для. Вот ссылка на документацию, которая может вам помочь. Здесь обсуждаются различные свойства, которые вы можете установить на фактической панели и UINavigationItem,

Просто имейте в виду:

  1. Вы теряете функциональность кнопки возврата (если не подключите ее самостоятельно)
  2. Встроенный жест "перетаскивание с левой стороны к движению назад" утрачен

UINavigationControllerтвои друзья.

Свифт 3

Я создал выход для элемента строки заголовка навигации, который поставляется вместе с панелью навигации (из браузера объектов) в раскадровке. Тогда я подал в суд на строку ниже:

navigationBarTitleItem.title = "Hello Bar"

Если вы не создали панель навигации в контроллере представления, это сработает.

      override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "Title"
}

Если вы создали панель навигации в контроллере представления, это будет полезно.

      override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Title"
}

Swift 5.1

// Установить название панели навигации программно и динамически

Примечание. Сначала добавьте NavigationControllerItem в свойViewController затем иди к их ViewController.swift файл и просто скопируйте и вставьте это в viewDidLoad().

navigationItem.title = "Your Title Here"

Это сработало для меня. Просто подключите розетку к панели навигации и получите доступ к заголовку через topItem.

      navBar.topItem?.title = "Your Title Here"

В Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Я надеюсь, что это помогает, привет!

в представленииDidLoad

navigationController?.navigationBar.topItem?.title = "Ваш текст"

Я предпочитаю использовать self.navigationItem.title = "Your Title Here" над self.title = "Your Title Here" предоставить заголовок на панели навигации, так как панель вкладок также использует self.title изменить его название. Вы должны попробовать следующий код один раз.

Примечание: вызов жизненного цикла super view необходим перед тем, как что-либо делать.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}

В представленииWillAppear()

      self.title = "Title here"

или вы также можете попробовать это

если у вас есть навигационный контроллер

      navigationItem.title = "Title here"
Другие вопросы по тегам