Programowa zmiana tytułu nawigacji


188

Mam pasek nawigacji z tytułem. Kiedy dwukrotnie klikam tekst, aby zmienić jego nazwę, faktycznie mówi, że jest to element nawigacyjny, więc może tak być.

Próbuję zmienić tekst za pomocą kodu, na przykład:

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

To oczywiście nie jest mój kod, tylko pokazanie, jak by to działało.

Dlatego za każdym razem, gdy naciskam przycisk, chcę zmienić tytuł.

Odpowiedzi:


539

Zmieniasz tytuł, zmieniając tytuł wyświetlanego kontrolera widoku:

viewController.title = "some title"

Zwykle odbywa się to w widoku, który załadował kontroler widoku:

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

Działa to jednak tylko wtedy, gdy kontroler widoku jest osadzony w UINavigationController. Ja bardzo polecam ten sposób zamiast tworzenia paska nawigacyjnego samodzielnie. Jeśli nalegasz na samodzielne utworzenie paska nawigacji, możesz zmienić tytuł, wykonując:

navigationBar.topItem.title = "some title"

1
ViewController.type nie ma członka o nazwie tytuł. To błąd, który dostaję.
Powstanie

2
Nie nazywaj tego bezpośrednio w klasie. Nazywasz to wystąpieniem podklasy UIViewController
drawag

Tak, ViewControllerodnosi się do samej klasy. Trzeba odwołać się do przykładu z ViewController. Z metody w klasie, na przykład viewDidLoadmożesz to zrobić za pomocą self. Jeśli nie znasz różnicy między klasą a instancją, zdecydowanie zalecamy zapoznanie się z jej treścią. Ten artykuł pomoże.
drewag

Działa również jak urok w Xcode .. mała zmiana -> self.title = @ "some title";
Streszczenie

self.title = „jakiś tytuł” ​​zadziałał dla mnie. Dziękuję Ci ! Próbowałem 'navigationController? .NavigationItem.title = "Jakiś tytuł". naprawdę nie jestem pewien, dlaczego to nie działa. (Mam tam element nawigacyjny, który umieściłem, aby wyświetlić tytuł, oprócz wbudowanego kontrolera nawigacyjnego). Nadal uważam, że to powinno działać, ale nie wiem dlaczego. Ponownie ustaw przelew na ratunek!
Naishta

68

Spróbuj wykonać następujące czynności viewDidLoad

self.navigationItem.title = "Your Title"

1
Pracuj dla mnie. iOS 11.4
Antony Wong

13

Poniższy kod działa dla mnie z Xcode 7:

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

10

Znalazłem to do pracy:

navigationItem.title = "Title"

Jak wyśrodkować tytuł w kontrolerze widoku, który jest potomkiem UINavigationController? Z jakiegoś powodu tekst jest wyrównany do lewej. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy

5

a także, jeśli spróbujesz utworzyć Navigation Barręcznie, ten kod ci pomoże

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

Zwykle najlepszą praktyką jest ustawienie tytułu na UIViewController. W ten sposób UINavigationItemustawiana jest również wartość. Zasadniczo jest to lepsze niż programowe przydzielanie i inicjowanie UINavigationBarniepowiązanego z niczym.

Tęsknisz za niektórymi korzyściami i funkcjonalnościami, dla których UINavigationBarzostał zaprojektowany. Oto link do dokumentacji, która może ci pomóc. Omówiono różne właściwości, które można ustawić na rzeczywistym pasku i na pasku UINavigationItem.

Pamiętaj tylko:

  1. Tracisz funkcję przycisku powrotu (chyba że sam go podłączysz)
  2. Wbudowany gest „przeciągnij z lewej strony, aby przesunąć do tyłu” przepadł

UINavigationControllersą twoimi przyjaciółmi.


4

Prawidłowa odpowiedź dla osób używających byłoby

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

3

Szybki 3

Stworzyłem ujście dla elementu paska tytułu nawigacji, który jest dostarczany z paskiem nawigacji (z przeglądarki obiektów) w serii ujęć. Potem pozwałem poniższy wiersz:

navigationBarTitleItem.title = "Hello Bar"

2

Jeśli chcesz zmienić tytuł z kontrolera widoku potomnego kontrolera widoku strony, który jest osadzony w kontrolerze nawigacyjnym, wyglądałoby to tak:

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

1

Jeśli masz NavigationControllerosadzony wewnątrz TabBarControllerpatrz poniżej:

super.tabBarController?.title = "foobar"

wprowadź opis zdjęcia tutaj

Takie problemy można debugować za pomocą skryptów debugujących. Wypróbuj polecenie Dłuta, pvc aby wydrukować każdy widoczny / ukryty widok w hierarchii.


0

W Swift 4:

Szybki 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Mam nadzieję, że to pomaga, pozdrawiam!


2
To tylko połowa przyjętej odpowiedzi. Ponadto, jeśli powiesz, że nic się nie zmieniło, to dlaczego miałbyś coś publikować ?! Proszę usunąć.
Eric Aya,

@Moritz, jesteś moderatorem czy coś takiego? jeśli powiedz tak, usunę go, jeśli nie, nie usunę go.
Radames E. Hernandez

1
Naprawdę to mówisz?, Nade mną są 4 całkowicie równe odpowiedzi, to dlaczego przychodzisz ze mną i każesz mi usunąć moje? Jestem zaufanym użytkownikiem, który wspiera społeczność, nie powtarzam tylko odpowiedzi. Chciałem tylko zaktualizować to pytanie zaktualizowaną szybką wersją.
Radames E. Hernandez

3
W twojej odpowiedzi nie ma nic zaktualizowanego. Jest to ten sam kod, co zaakceptowana odpowiedź, część „Zwykle robi się to w widoku, załadowano” część ...
Eric Aya

0

Wolę używać self.navigationItem.title = "Your Title Here"over, self.title = "Your Title Here"aby podać tytuł na pasku nawigacyjnym, ponieważ pasek kart służy również self.titledo zmiany tytułu. Powinieneś raz wypróbować następujący kod.

Uwaga: wywołanie cyklu życia super widoku jest konieczne przed wykonaniem jakichkolwiek czynności.

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

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

0

Swift 5.1

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

0

Swift 5.1

// Ustaw tytuł paska nawigacji programowo i dynamicznie

Uwaga: Najpierw dodaj NavigationControllerItem do Your, ViewControllera następnie przejrzyj ich ViewController.swiftplik i po prostu skopiuj i wklej to viewDidLoad().

navigationItem.title = "Your Title Here"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.