Изменение заголовка навигации программно
У меня есть панель навигации с заголовком. Когда я дважды щелкаю текст, чтобы переименовать его, он фактически говорит, что это элемент навигации, так что это может быть так.
Я пытаюсь изменить текст с помощью кода, например:
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"
}
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
,
Просто имейте в виду:
- Вы теряете функциональность кнопки возврата (если не подключите ее самостоятельно)
- Встроенный жест "перетаскивание с левой стороны к движению назад" утрачен
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"