Програмна зміна заголовка навігації


188

У мене є навігаційна панель із заголовком. Коли я двічі клацнув текст, щоб перейменувати його, він насправді говорить, що це елемент навігації, тому це може бути саме так.

Я намагаюся змінити текст за допомогою коду, наприклад:

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

Це явно не мій код, а лише показує, як він би працював.

Тому щоразу, коли натискаю кнопку, я хочу змінити назву.

Відповіді:


539

Ви змінюєте заголовок, змінюючи назву відображуваного контролера перегляду:

viewController.title = "some title"

Зазвичай це робиться з огляду на те, чи завантажувалося на контролер перегляду:

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

Однак це працює лише в тому випадку, якщо ваш контролер перегляду вбудований в UINavigationController. Я настійно рекомендую робити це, а не створювати навігаційну панель самостійно. Якщо ви наполягаєте на створенні навігаційної панелі самостійно, ви можете змінити назву, виконавши:

navigationBar.topItem.title = "some title"

1
ViewController.type не має члена, названого ім'ям. Ось така помилка я отримую.
Підйом

2
Ви не називаєте це безпосередньо на уроці. Ви називаєте це екземпляром підкласу UIViewController
drewag

Так, ViewControllerвідноситься до самого класу. Вам необхідно звернутися до прикладу з ViewController. З методу у вашому класі, наприклад viewDidLoad, ви можете це зробити, використовуючи self. Якщо ви не знаєте різниці між класом та екземпляром, настійно рекомендую вам дізнатися, що це таке. Ця стаття допоможе.
drewag

Також працює як принадність у Xcode .. лише невелика зміна -> self.title = @ "деякий заголовок";
Анотація

self.title = "якийсь заголовок" працював на мене. Дякую ! Я намагався 'navigationController? .NavigationItem.title = "Якийсь заголовок". дійсно не впевнений, чому це не працює. (У мене є елемент навігації, який я розмістив для відображення заголовка, крім вбудованого контролера навігації). Я все ще думаю, що це має працювати, але не знаю, чому. Стек переповнення на допомогу ще раз!
Naishta


13

Код нижче працює для мене з Xcode 7:

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

10

Я виявив, що це працює:

navigationItem.title = "Title"

Як ви відцентруєте заголовок у контролері перегляду, який є дочірнім контролером UINavigationController? Текст чомусь вирівнюється зліва. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy

5

а також якщо ви спробуєте створити 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);
}

4

Зазвичай найкращою практикою є встановлення заголовку на UIViewController. Цим самим UINavigationItemвстановлюється також. Взагалі, це краще, ніж програмно розподілити та ініціалізувати UINavigationBarте, що не пов'язане ні з чим.

Ви пропускаєте деякі переваги та функціональні можливості, для яких UINavigationBarбули розроблені. Ось посилання на документацію, яка може вам допомогти. Тут обговорюються різні властивості, які можна встановити на фактичній панелі та на a UINavigationItem.

Просто пам’ятайте:

  1. Ви втрачаєте функціональність кнопки "назад" (якщо ви самі не підключите її)
  2. Вбудований жест "перетягування ліворуч, щоб повернути назад", втрачається

UINavigationControllerваші друзі.



3

Швидкий 3

Я створив розетку для елемента заголовка навігаційного рядка, який постачається разом із навігаційною панеллю (із браузера об’єктів) на дошці повідомлень. Тоді я подав позов до рядка нижче:

navigationBarTitleItem.title = "Hello Bar"

2

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

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

1

Якщо у вас NavigationControllerвбудована внутрішня частина TabBarControllerдивіться нижче:

super.tabBarController?.title = "foobar"

введіть тут опис зображення

Ви можете налагоджувати подібні проблеми за допомогою сценаріїв налагодження. Спробуйте команду Chisel pvc для друку кожного видимого / прихованого виду на ієрархії.


0

У Swift 4:

Швидкий 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Я сподіваюся, що це допоможе, з повагою!


2
Це лише половина прийнятої відповіді. Крім того, якщо ви говорите, що нічого не змінилося, то чому б ви нічого не публікували ?! Видаліть, будь ласка.
Ерік Айя

@Moritz Ви модератор чи щось подібне? якщо сказати Так, я видалю його, якщо ні - не видаляю.
Радамес Е. Ернандес

1
Ти справді це кажеш ?, над мною є 4 абсолютно рівних відповіді, то чому ти прийдеш зі мною і кажеш мені стерти мою? Я надійний користувач, який підтримує спільноту, я не збираюся просто повторювати відповіді. Я просто хотів оновити це питання оновленою швидкою версією.
Радамес Е. Ернандес

3
У вашій відповіді нічого не оновлено. Це той самий код, що і прийнята відповідь, частина "Зазвичай це робиться з огляду на те, що завантажили" частина ...
Ерік Айя

0

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

Примітка: перед тим, як робити будь-які речі, потрібно зателефонувати до життєвого циклу суперпрогляду.

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

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

0

Швидкий 5.1

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

0

Швидкий 5.1

// Встановити заголовок NavigationBar програмно та динамічно

Примітка. Спочатку додайте NavigationControllerItem до свого, ViewControllerпотім перейдіть до їхнього ViewController.swiftфайлу та просто скопіюйте та вставте це viewDidLoad().

navigationItem.title = "Your Title Here"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.