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


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.