Chiama a livello di codice il pulsante Indietro del controller di navigazione su iOS


84

In un'app per iPhone basata su UINavigationController, in un metodo vorrei eseguire l'equivalente programmatico della pressione del pulsante Indietro e tornare indietro di una visualizzazione.

cioè premere automaticamente il pulsante Lavori come mostrato qui:

Immagine del controller di navigazione

Posso effettuare una chiamata iOS generica o sono necessarie ulteriori informazioni?

Risposte:


188

UINavigationControllerIl -popViewControllerAnimated:metodo di dovrebbe fare quello che vuoi:

[navigationController popViewControllerAnimated:YES];

12
fantastico, grazie a Steve e Niels. La soluzione che ho usato è stata [self.navigationController popViewControllerAnimated: YES]; facile;)
oberbaum

funziona benissimo tranne i viewcontroller aggiunti su uitabbar. qualche indizio ??
virata

1
Ho aggiunto [self.navigationController popViewControllerAnimated:YES];ma non fa nulla, tuttavia c'è un avviso quando si tocca quel pulsante che funziona.
mohsin.mr

Hmm, ottengo una schermata vuota, un'app che non risponde e quanto segue nella console: "Terminare una transizione di navigazione in uno stato imprevisto. L'albero delle sottoview della barra di navigazione potrebbe essere danneggiato."
Kurt

24

Supponendo che tu non voglia effettivamente PREMERE il pulsante a livello di programmazione, ma semplicemente copiare il risultato della pressione del pulsante, dovresti dire al controller di navigazione di far apparire il controller di visualizzazione corrente.

[self.navigationController popViewControllerAnimated:YES];

Questo lo rimuoverà dallo stack e ti riporterà al controller di visualizzazione precedente.


21

Swift 3.0

Torna alla visualizzazione principale

self.navigationController?.popToRootViewController(animated: true)

Torna alla visualizzazione precedente

self.navigationController?.popViewController(animated: true)

Swift 2.3

Torna alla visualizzazione principale

self.navigationController?.popToRootViewControllerAnimated(true)

Torna alla visualizzazione precedente

self.navigationController?.popViewControllerAnimated(true)

7

Dovresti chiamare

popViewControllerAnimated:

che è l'opposto dell'aggiunta di controller di visualizzazione con pushViewController:animated:


6
[self.navigationController popViewControllerAnimates:YES];

è l'opzione migliore, ma se non sei nella stessa classe del controller di visualizzazione o il tuo delegato cambia prima che venga chiamato il metodo del pulsante Indietro, puoi anche provare:

prima devi definire il pulsante Indietro ---

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"anyTitleForBackButton" style: UIBarButtonItemStyleBordered target: nil action: @selector(backButtonTapped)];

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

e poi nel metodo backButtonTapped puoi chiamare--

[self.navigationController pushViewController:desiredViewController animated:YES];
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.