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ł.

Podniesienie
źródło

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"
Drawag
źródło
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"
Avi
źródło
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"
}
grmonkeybiz
źródło
10

Znalazłem to do pracy:

navigationItem.title = "Title"
AJ9
źródło
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);
}
Aleksiej Tymoszenko
źródło
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.

zarośnięty
źródło
4

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

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}
Kevin Singh
źródło
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"
nyxee
źródło
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"
}
Francojamesfan
źródło
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.

rustyMagnet
źródło
0

W Swift 4:

Szybki 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Mam nadzieję, że to pomaga, pozdrawiam!

Radames E. Hernandez
źródło
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"
}
Mukesh Shakya
źródło
0

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}
Marlhex
źródło
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"

Raksha.
źródło