2011-02-11 10 views
21

Cercando di personalizzare il mio pulsante Indietro in un controller di navigazione drilldown.navigationItem.backBarButtonItem non funziona? Perché il menu precedente è ancora visualizzato come pulsante?

su My One controller della vista che hanno un Aggiungi pulsante dove il codice genera programatically un nuovo UIViewController:

- (void)add:(id)sender 
{ 
    MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil]; 

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

    [addController release]; 
} 

Questo funziona e quando si fa clic sul pulsante Aggiungi entra in profondità nella nuova vista. All'interno del metodo MyAddViewController.mviewDidLoad ho:

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

Ma questo non sta funzionando. Il pulsante Indietro nel controller di navigazione rimane il titolo del controller della vista precedente nello stack. Sembra che la linea non faccia nulla. Ho dimenticato qualcosa?

Grazie

risposta

26

Questo funziona solo su ogni figlio dopo il viewController che ha self.navigationItem.backBarButtonItem.

39

self.navigationItem.backBarButtonItem è per il pulsante Indietro che viene visualizzato nella vista spinto dal controller della vista. Quindi è necessario spostare quella linea al controller della vista precedente.

+0

Come si assegna l'azione da eseguire sulla vista spillata prima di tornare alla vista precedente Controller. – mask

+1

Per quanto ne so, non puoi farlo usando il backBarButtonItem.Per fare ciò è necessario sostituire il leftBarButtonItem e assegnargli un'azione. – marimaf

+2

Questa risposta mi ha salvato dopo ore di frustrazione. – Tres

10

Stai confondendo il backBarButtonItem e il leftBarButtonItem. Dal UINavigationItem docs su backBarButtonItem:

Quando questa voce è l'elemento posteriore del navigazione bar-quando è il prossimo seguito la parte superiore di elemento può essere rappresentato come un pulsante indietro sulla navigazione bar. Utilizzare questa proprietà su specificare il pulsante Indietro. L'obiettivo e l'azione dell'elemento Pulsante barra posteriore impostato dovrebbero essere nulli. Il valore predefinito è un elemento del pulsante della barra che visualizza il titolo dell'elemento di navigazione.

Quindi, se si dovesse cambiare:

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

A:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 

Credo che si potrebbe ottenere l'effetto desiderato.

+10

... eccetto per non essere un "pulsante indietro appropriato", cioè, mancherà la forma della freccia. –

+0

tyvm +1 - Ho appena perso un'ora cercando di assegnare a backBarButtonItem quando leftBarButtonItem era esattamente ciò di cui avevo bisogno! – kfmfe04

4

Non è possibile sostituire backBarButtonItem, ma è possibile utilizzare lo leftBarButtonItem per sovrascriverlo. Ma per ottenere il nuovo pulsante per eseguire operare lo stesso del pulsante indietro, si ha bisogno per impostare la destinazione e l'azione del tasto nuova qualcosa come:

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

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
     initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered 
     target:self action:@selector(dismissMyView)]; 
} 
+4

Tranne che non assomiglierà al pulsante Indietro (pulsante a forma di freccia) – marimaf

0

Se ViewController una spinta ViewController B nel frattempo vogliamo impostare il pulsante della barra posteriore, dovremmo impostare "self.navigationItem.backBarButtonItem = ..". Se è stato impostato in ViewController B, non funzionerà come vogliamo.

Problemi correlati