iPhone: impostazione del titolo della barra di navigazione


87

Ciao a tutti. Sono ancora abbastanza nuovo nello sviluppo di iPhone e ho un po 'di difficoltà a capire come cambiare il titolo della mia barra di navigazione. In un'altra domanda su questo sito qualcuno ha consigliato di usare:

viewController.title = @"title text";

ma questo non funziona per me ... Devo aggiungere un UINavigationController per farlo? O forse solo una presa dalla mia sottoclasse UIViewController? Se aiuta, ho definito la barra di navigazione in IB e sto cercando di impostarne il titolo nella mia sottoclasse UIViewController. Questa è un'altra di quelle cose semplici che mi fanno venire il mal di testa. Mettere self.title = @ "title text"; in viewDidLoade initWithNibNamenon ha funzionato neanche. Qualcuno sa cosa sta succedendo e come farlo accadere giusto?

Grazie!

Risposte:


154

Il controller della visualizzazione deve essere un elemento figlio di alcuni UINavigationController affinché la .titleproprietà abbia effetto. Se la UINavigationBar è semplicemente una visualizzazione, è necessario eseguire il push di un elemento di navigazione contenente il titolo o modificare l'ultimo elemento di navigazione:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

o

bar.topItem.title = @"title text";

8
Wow. Ho passato seriamente l'ultima ora a sfogliare forum e documentazione cercando di capirlo, e mi ero convinto che sarebbe stato più complesso di così. Questo codice è così semplice e non ho dovuto modificare nulla in IB. Perfetto! KennyTM, sei forte. Se ricordo bene, hai anche risposto alla mia domanda su NSDate e mi hai messo a fare ricerche nei dizionari. Sei la mia nuova persona preferita su questo sito. Grazie mille per il tuo aiuto!
Arthur Skirvin

5
il tuo commento mi ha fatto sorridere e chiedermi: qualcuno ha mai fatto amicizia qui in SO, mai? di solito tutti qui sono molto utili ma non sembrano esprimere emozioni umane (tranne il richiedente ovviamente quando è frustrato)
maltalef

Vedi la risposta di Sorin per una soluzione compatibile con lo storyboard.
devios1

Grazie per la tua risposta che mi fa davvero risparmiare molto tempo. :) @kennytm
jerry_sjtu

124

se stai facendo tutto tramite codice nel viewDidLoadmetodo di UIViewControllerdovresti solo aggiungereself.title = @"title text";

qualcosa come questo:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

potresti anche provare self.navigationItem.title = @"title";

controlla anche se il tuo navigationItem non è nullo e se hai impostato uno sfondo personalizzato per la barra di navigazione controlla se il titolo è impostato senza di esso.


@ SorinA, grazie. È il modo migliore per dare il titolo della barra di navigazione.
Sabato

33

C'è un problema con l'utilizzo self.title = @"title";

Se stai utilizzando la barra di navigazione insieme alla barra delle schede, la riga sopra cambia anche l'etichetta per l'elemento della barra delle schede. Per evitare ciò, usa ciò che @testing ha suggerito

self.navigationItem.title = @"MyTitle";

13

Se vuoi cambiare il titolo della barra di navigazione (non il titolo del pulsante Indietro della barra di navigazione!), Questo codice funzionerà.

self.navigationController.topViewController.title = @"info";

9

Se vuoi cambiare il titolo di una navBar all'interno di un controller tabBar, fai questo:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}

viewDidAppear ha fatto il trucco per me dopo 2 ore cercando di risolverlo. Grazie :)
Tchelow

topItem.title può o non può essere il titolo della barra di navigazione. Se è la schermata di livello superiore senza pulsante Indietro, imposterà il titolo. Ma se hai un pulsante Indietro, il topItem.title è in realtà il titolo del pulsante Indietro.
user2962499

5

Nella mia app basata sulla navigazione faccio questo:

myViewController.navigationItem.title = @"MyTitle";

4

Avevo un controller di navigazione integrato in un TabbarController. Questo ha funzionato

self.navigationItem.title=@"title";

4

Per impostazione predefinita, il controller di navigazione mostra il titolo della "voce principale"

quindi nel tuo metodo viewdidload del tuo appdelegate puoi. L'ho provato e funziona

navController.navigationBar.topItem.title = @"Test";

2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Questo codice ha funzionato.


Benvenuto in SO e grazie per il post. È meglio che invii queste informazioni come commento, dai un'occhiata a Come rispondere per maggiori informazioni.
Serge Belov

2

Se stai lavorando con Storyboard, puoi fare clic sul controller, passare alla scheda delle proprietà e impostare il testo del titolo lì.


1

Immagino che tu abbia bisogno di un titolo dinamico, ecco perché non lo imposti in IB.

E presumo che il tuo oggetto viewController sia quello specificato nel NIB?

Forse provare a impostarlo su un valore fittizio in IB e quindi eseguire il debug dei metodi per vedere quale controller ha il valore fittizio, supponendo che appaia come titolo ...


1

Dall'interno del tuo TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Blah blah Some Amazing title";


1

Per tutti i tuoi Swift-ers là fuori, questo ha funzionato perfettamente per me. È anche uno dei modi più brevi per impostare il titolo:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
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.