/ / Modifica del titolo UIBackButtonItem - cocoa-touch

Modifica del titolo UIBackButtonItem - cocoa-touch

Ho una app basata su NavigationController. Voglio cambiare il titolo del pulsante Indietro per il controller di visualizzazione radice. Ho provato il seguente codice nel metodo viewDidLoad di rootViewController, ma non ha avuto successo:

self.navigationItem.backBarButtonItem.title = @"Back";

Qualche idea?

risposte:

45 per risposta № 1

Il titolo del pulsante Indietro è:

  1. Il titolo del precedente controller di visualizzazione
  2. Il nome del pulsante indietro della voce di navigazione del precedente controller di visualizzazione

Se stai impostando il pulsante Indietro pernella voce di navigazione del controller della vista corrente non si imposta il pulsante che viene visualizzato nella vista corrente. In effetti, si sta impostando il pulsante Indietro che verrà utilizzato se si preme un altro controller di visualizzazione.


51 per risposta № 2

Ho avuto successo creando il mio UIBarButtonItem invece di impostare il titolo di quello esistente:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

25 per risposta № 3

Forse già risposto, ma non semplicemente.

self.navigationItem.backBarButtonItem predefinito a zero. Quindi, se si imposta il titolo su di esso, non accadrà nulla perché sta influenzando a nil oggetto dell'indirizzo. Questo non genera un errore, perché l'obiettivo-c consente la messaggistica nil oggetti.

RISPOSTA: è necessario creare il proprio oggetto pulsante per impostarlo. Puoi initWithTitle o crearlo e quindi impostare il titolo in seguito.

PS - come detto, il backBarButtonItem influisce solo sulle visualizzazioni secondarie che vengono applicatein alto nella pila di navigazione. A seconda di come è stata progettata la tua app, la vista root non può essere più visualizzata e non può avere un pulsante indietro. Tuttavia, puoi influenzare il leftBarButtonItem.


5 per risposta № 4

Il pulsante Indietro estrae il suo testo dal titolo del controllore della vista genitore.

Nel controller della vista genitore (il controller della vista che appare quando si tocca il pulsante Indietro), impostare il proprio titolo come testo desiderato sul pulsante Indietro.

Ad esempio, diciamo che abbiamo un RootViewController classe. Quando clicchiamo su una cella nella sua vista tabella, inseriamo un'istanza di SecondViewController. Vogliamo il pulsante indietro del SecondViewController istanza da leggere, "Casa".

nel viewDidLoad metodo di RootViewController.m:

self.title = @"Home";

nel viewDidLoad metodo di SecondViewController.m:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

Se vuoi che il tuo pulsante Indietro legga, "Indietro", imposta il titolo del controllore della vista genitore su @"Back";


1 per risposta № 5

Non puoi semplicemente cambiare il titolo del retropulsante nel controller della vista principale perché il controller della vista principale non visualizza un pulsante Indietro. Dopo tutto, è la radice, a cosa puoi tornare? Mentre potrebbe esserci qualcosa di logico nella tua app, non c'è nulla di ovvio che l'implementazione di default dovrebbe fare.

È possibile inserire un pulsante personalizzato al posto divolete davvero un controllo lì (create un UIBarButtonItem e impostate navigationItem.backBarButtonItem su di esso), anche se non avrà lo stesso aspetto di uno di quelli predefiniti (sarà un quadrato, a differenza di una freccia).


1 per risposta № 6

Le risposte di Mihai Damian e Chris Lundie sono corrette.

Un'altra cosa da notare però è che se tucambia il tuo navigationItem.title di viewController dopo aver impostato il tuo navigationItem.backBarButtonItem personalizzato, tornerà al suo stato predefinito, che è quello di scartare il tuo backBarButtonItem personalizzato e utilizzare invece il nuovo titolo che hai appena impostato.

Quindi, mi assicuro di reimpostare il backBarButtonItem ogni volta che cambio il titolo di viewController:

self.navigationItem.title = @"New Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
backButton.title = @"Back";
self.navigationItem.backBarButtonItem = backButton;

0 per risposta № 7

Il tuo problema è probabilmente molto simile a quello qui descritto: http://blog.tmro.net/2009/05/uitabbarbuttonitem-did-not-change-its.html

Prova a eseguire il debug per verificare se sono presenti _barButtonItemFlags impostati per il tuo pulsante ...


0 per risposta № 8

Come menzionato un precedente poster (Brenden), per impostazione predefinita il valore di backBarButtonItem è nullo, quindi impostando il titolo si ottiene l'invio di un messaggio a un oggetto nil che ovviamente viene ignorato.

Se non vuoi muckare con la creazione manuale di un nuovo pulsante per impostare il suo titolo, c'è un giro di lavoro in Interface Builder.

In IB, per un determinato controller di visualizzazione di cui fa parteuno stack di navigationController, è possibile fare clic sul navigationItem che rappresenta la barra di navigazione. Quando si fa clic, la finestra di ispezione Proprietà consente di impostare tre proprietà: Titolo, Prompt e BackButton.

Se nel campo backButton digiti un qualsiasi testo casuale, questo ha l'effetto di creare un'istanza di un oggetto backBarButtonItem e nel tuo codice, puoi ora impostare il suo titolo su qualsiasi testo tu voglia.

Spero che questo aiuti qualcuno.


0 per risposta № 9

Forse non si vuole t ogni viewController spinto da una viewController avere un pulsante Annulla piuttosto che impostare un leftBarButtonItem nel display viewController con un titolo personalizzato

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"back", @"") style:UIBarButtonSystemItemCancel target:self action:@selector(popViewController)] autorelease];

- (void)popViewController {
[self.navigationController popViewControllerAnimated:YES];
}

0 per risposta № 10

Presupposto: nel controller di navigazione sono presenti due ViewController RootViewController e DetailViewController.

  • Primo passo: Devi sostituire il titolo di RootViewController

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"backTitle" style:UIBarButtonItemStylePlain target:nil action:nil];
    
  • Secondo passo:

    [self.navigationController pushViewController: detailVC animated: YES];

Fatto! Vedrai il pulsante Indietro di DetailViewController è "backTitle"


0 per risposta № 11
- (void)pushViewController:(UIViewController *)controller
withBackTitle:(NSString *)backTitle
animated:(BOOL)animated {
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backTitle
style:UIBarButtonItemStyleDone
target:nil
action:nil];
[self.navigationController pushViewController:controller animated:animated];
}

è lavori.


-1 per risposta № 12

Questa è la soluzione migliore per questo, non impostare il titolo navigationitem come al solito self.navigationitem.title. Metti questo codice sul download della vista genitore

    CGRect frame = CGRectMake(0, 0, 320, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:20.0];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor whiteColor];

self.navigationItem.titleView = label;
label.text = @"My Navigation Bar";

Impostando il titolo come sopra, il titolo di navigazione effettivo sarà nullo, quindi il titolo della barra di navigazione sarà automaticamente "Indietro"


-1 per risposta № 13
self.navigationController.navigationBar.backItem.title = @"TEXT";

-1 per risposta № 14

Ho una soluzione interessante:

Nel metodo che passa alla seconda vista (IBAction o didSelectRaw ecc.), Passo al titolo che voglio nel titolo dell'articolo precedente, ad esempio: self.title = @"Inbox";. Inoltre, aggiungo il metodo ViewWillApear per modificare il titolo quando l'utente fa clic sul titolo principale.