Appeler par programme le bouton de retour du contrôleur de navigation sur iOS

84

Dans une application iPhone basée sur UINavigationController, dans une méthode, je voudrais effectuer l'équivalent programmatique du bouton de retour enfoncé et revenir à une vue.

c'est-à-dire appuyez automatiquement sur le bouton Jobs comme vu ici:

Image du contrôleur de navigation

Y a-t-il un appel iOS générique que je peux passer ou des informations supplémentaires sont-elles nécessaires?

Oberbaum
la source

Réponses:

188

UINavigationControllerLa -popViewControllerAnimated:méthode de doit faire ce que vous voulez:

[navigationController popViewControllerAnimated:YES];
Steve Harrison
la source
12
génial, merci à Steve et Niels. La solution que j'ai utilisée était [self.navigationController popViewControllerAnimated: YES]; easy;)
oberbaum
cela fonctionne très bien sauf les contrôleurs de vue ajoutés sur uitabbar. des indices ??
virata
1
J'ai ajouté [self.navigationController popViewControllerAnimated:YES];mais cela ne fait rien, mais il y a une alerte lorsque vous appuyez sur ce bouton qui fonctionne.
mohsin.mr
Hmm, j'obtiens un écran vide, une application qui ne répond pas et ce qui suit dans la console: "Fin d'une transition de navigation dans un état inattendu. L'arborescence de la sous-vue de la barre de navigation peut être corrompue."
Kurt
24

En supposant que vous ne souhaitiez pas réellement APPUYER sur le bouton par programme, mais simplement copier le résultat de la pression sur le bouton, vous devez indiquer au contrôleur de navigation de faire apparaître le contrôleur de vue actuel.

[self.navigationController popViewControllerAnimated:YES];

Cela le supprimera de la pile et vous ramènera au contrôleur de vue précédent.

Kevin Elliott
la source
21

Swift 3.0

Retour à la vue racine

self.navigationController?.popToRootViewController(animated: true)

Retour à la vue précédente

self.navigationController?.popViewController(animated: true)

Swift 2.3

Retour à la vue racine

self.navigationController?.popToRootViewControllerAnimated(true)

Retour à la vue précédente

self.navigationController?.popViewControllerAnimated(true)
Tal Zion
la source
7

Tu devrais appeler

popViewControllerAnimated:

ce qui est l'opposé de l'ajout de contrôleurs de vue avec pushViewController:animated:

Château de Niels
la source
6
[self.navigationController popViewControllerAnimates:YES];

est la meilleure option, mais si vous n'êtes ni sur la même classe de contrôleur de vue ou si votre délégué change avant que votre méthode de bouton de retour ne soit appelée, vous pouvez également essayer -

vous devez d'abord définir le bouton retour ---

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

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

puis dans la méthode backButtonTapped, vous pouvez appeler -

[self.navigationController pushViewController:desiredViewController animated:YES];
Nishant Mahajan
la source