Programowo wywołaj przycisk Wstecz kontrolera nawigacji w systemie iOS

84

W aplikacji na iPhone'a opartej na UINavigationController w metodzie chciałbym wykonać programowy odpowiednik naciśnięcia przycisku Wstecz i cofnięcia widoku.

tj. automatycznie naciśnij przycisk Jobs, jak widać tutaj:

Obraz kontrolera nawigacji

Czy mogę wykonać ogólne połączenie na iOS, czy też potrzebne są dodatkowe informacje?

oberbaum
źródło

Odpowiedzi:

188

UINavigationController„s -popViewControllerAnimated:metoda powinna zrobić to, co chcesz:

[navigationController popViewControllerAnimated:YES];
Steve Harrison
źródło
12
super, dzięki Steve i Niels. Rozwiązaniem, którego użyłem, było [self.navigationController popViewControllerAnimated: YES]; łatwe;)
oberbaum
działa to świetnie, z wyjątkiem kontrolerów widoku dodanych na uitabbar. jakieś wskazówki?
virata,
1
Dodałem, [self.navigationController popViewControllerAnimated:YES];ale nic to nie daje, ale jest ostrzeżenie o dotknięciu tego przycisku, który działa.
mohsin.mr
Hmm, pojawia się pusty ekran, nieodpowiadająca aplikacja i następujący komunikat w konsoli: „Kończenie przejścia nawigacji w nieoczekiwanym stanie. Drzewo podwidoku paska nawigacji może zostać uszkodzone”.
Kurt
24

Zakładając, że w rzeczywistości nie chcesz programowo naciskać przycisku, ale po prostu skopiuj wynik naciśnięcia przycisku, powinieneś powiedzieć kontrolerowi nawigacji, aby wyskoczył z bieżącego kontrolera widoku.

[self.navigationController popViewControllerAnimated:YES];

Spowoduje to usunięcie go ze stosu i powrót do poprzedniego kontrolera widoku.

Kevin Elliott
źródło
21

Swift 3.0

Wróć do widoku głównego

self.navigationController?.popToRootViewController(animated: true)

Powrót do poprzedniego widoku

self.navigationController?.popViewController(animated: true)

Swift 2.3

Wróć do widoku głównego

self.navigationController?.popToRootViewControllerAnimated(true)

Powrót do poprzedniego widoku

self.navigationController?.popViewControllerAnimated(true)
Tal Zion
źródło
7

Powinieneś zadzwonić

popViewControllerAnimated:

co jest przeciwieństwem dodawania kontrolerów widoku z pushViewController:animated:

Zamek Niels
źródło
6
[self.navigationController popViewControllerAnimates:YES];

jest najlepszą opcją, ale jeśli nie jesteś w tej samej klasie kontrolera widoku lub Twój delegat zmienił się przed wywołaniem metody przycisku Wstecz, możesz również spróbować:

najpierw musisz zdefiniować przycisk Wstecz ---

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

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

a następnie w metodzie backButtonTapped możesz wywołać:

[self.navigationController pushViewController:desiredViewController animated:YES];
Nishant Mahajan
źródło