Modifica del titolo di navigazione a livello di codice


188

Ho una barra di navigazione con un titolo. Quando faccio doppio clic sul testo per rinominarlo, in realtà dice che è un elemento di navigazione, quindi potrebbe essere quello.

Sto provando a cambiare il testo usando il codice, come:

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

Questo non è ovviamente il mio codice, mostrando solo come funzionerebbe.

Quindi ogni volta che premo il pulsante, voglio che il titolo cambi.

Risposte:


539

Puoi cambiare il titolo cambiando il titolo del controller di visualizzazione visualizzato:

viewController.title = "some title"

Normalmente questo viene fatto in vista caricato sul view controller:

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

Tuttavia, questo funziona solo se il controller di visualizzazione è incorporato in un UINavigationController. Ho vivamente consiglio di fare questo invece di creare una barra di navigazione da soli. Se insisti nella creazione di una barra di navigazione, puoi modificare il titolo facendo:

navigationBar.topItem.title = "some title"

1
ViewController.type non ha un membro chiamato title. Questo è l'errore che ottengo.
aumento il

2
Non lo chiami direttamente in classe. Lo chiami su un'istanza di una sottoclasse di UIViewController
drewag

Sì, si ViewControllerriferisce alla classe stessa. Devi fare riferimento a un'istanza di ViewController. Dall'interno di un metodo della tua classe, ad esempio viewDidLoad, puoi farlo utilizzando self. Se non conosci la differenza tra una classe e un'istanza, ti consiglio vivamente di imparare di cosa si tratta. Questo articolo ti aiuterà.
Drewag,

Funziona come un incantesimo anche in Xcode .. solo una piccola modifica -> self.title = @ "qualche titolo";
Estratto

self.title = "some title" ha funzionato per me. Grazie ! Ho provato 'navigationController? .NavigationItem.title = "Qualche titolo". davvero non so perché non funziona. (Ho un elemento di navigazione lì, che ho posizionato per visualizzare il titolo, oltre al controller di navigazione incorporato). Penso ancora che dovrebbe funzionare, ma non so perché. Stack overflow in soccorso ancora una volta!
Naishta,

68

Prova quanto segue in viewDidLoad

self.navigationItem.title = "Your Title"

1
Lavora per me. iOS 11.4
Antony Wong,

13

Il codice seguente funziona per me con Xcode 7:

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

10

Ho trovato che questo funziona:

navigationItem.title = "Title"

Come si centra il titolo in un controller di visualizzazione che è figlio di un UINavigationController? Per qualche motivo il testo è allineato a sinistra. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy,

5

e anche se proverai a creare Navigation Barmanualmente questo codice ti aiuterà

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

Normalmente, la migliore pratica è impostare il titolo su UIViewController. In questo modo, UINavigationItemviene impostato anche. In generale, è meglio che allocare e inizializzare a livello di codice un UINavigationBarnon collegato a nulla.

Ti perdi alcuni dei vantaggi e delle funzionalità per cui è UINavigationBarstato progettato. Ecco un link alla documentazione che può esserti utile. Descrive le diverse proprietà che è possibile impostare sulla barra effettiva e su a UINavigationItem.

Ricorda:

  1. Perdi la funzionalità del pulsante Indietro (a meno che non lo cabli da solo)
  2. Il gesto incorporato "trascina dal lato sinistro per scorrere indietro" viene annullato

UINavigationControllersono i tuoi amici.


4

La risposta corretta per le persone che usano sarebbe

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

3

Swift 3

Ho creato uno sbocco per l'elemento della barra del titolo di navigazione fornito con la barra di navigazione (dal browser degli oggetti) nello storyboard. Poi ho fatto causa alla riga seguente:

navigationBarTitleItem.title = "Hello Bar"

2

Se si desidera modificare il titolo da un controller di visualizzazione figlio di un controller di visualizzazione pagina incorporato in un controller di navigazione, sarebbe simile al seguente:

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

1

Se hai un NavigationControllerincorporato all'interno di un TabBarControllervedi sotto:

super.tabBarController?.title = "foobar"

inserisci qui la descrizione dell'immagine

È possibile eseguire il debug di problemi come questo con gli script di debugger. Prova il pvc comando di Chisel per stampare ogni vista visibile / nascosta sulla gerarchia.


0

In Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Spero che aiuti, saluti!


2
Questa è solo la metà della risposta accettata. Inoltre, se dici che non è cambiato nulla, allora perché pubblichi qualcosa ?! Per piacere cancella.
Eric Aya,

@Moritz sei un moderatore o qualcosa del genere? in caso affermativo, lo eliminerò, altrimenti non lo eliminerò.
Radames E. Hernandez,

1
Lo dici davvero? Sopra di me ci sono 4 risposte completamente uguali, allora perché vieni con me e mi dici di cancellare la mia? Sono un utente fidato che supporta la community, non sto solo andando in giro a ripetere le risposte. Volevo solo aggiornare questa domanda con una versione aggiornata aggiornata.
Radames E. Hernandez,

3
Non c'è nulla di aggiornato nella tua risposta. Questo è lo stesso codice della risposta accettata, la parte "Normalmente questo è fatto in vista ha caricato" ...
Eric Aya,

0

Preferisco usare self.navigationItem.title = "Your Title Here"over self.title = "Your Title Here"per fornire il titolo nella barra di navigazione poiché la barra delle schede consente anche self.titledi modificare il titolo. Dovresti provare il seguente codice una volta.

Nota: è necessario chiamare il ciclo di vita di super view prima di eseguire qualsiasi operazione.

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

// Imposta il titolo NavigationBar a livello di codice e dinamico

Nota: prima aggiungi NavigationControllerItem a Your ViewControllerquindi vai al loro ViewController.swiftfile e copia e incolla questo in viewDidLoad().

navigationItem.title = "Your Title Here"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.