Jak można wywołać metodę, gdy naciśnięty jest przycisk Wstecz na przycisku UINavigationController
. Muszę mieć możliwość wywołania metody przed wyświetleniem poprzedniego widoku. czy to możliwe? Jeśli tak, czy ktoś może doradzić, jak to zrobić?Jak wywołać metodę po naciśnięciu przycisku Wstecz na sterowniku UINavigationController? (iPhone)
Odpowiedz
Szybkim rozwiązaniem jest dodanie implementacji metody viewWillDisappear:. Zostanie on uruchomiony, gdy tylko zniknie viewController w odpowiedzi na naciśnięcie przycisku wstecz.
- (void)viewWillDisappear:(BOOL)animated {
//...
//make you stuff here
//...
}
Innym rozwiązaniem jest dodanie niestandardowego respondenta do przycisku Wstecz. Można zmodyfikować metodę startowy Twojego viewController jest następująca:
- (id)init {
if (self = [super init]) {
//other your stuff goes here
//...
//here we customize the target and action for the backBarButtonItem
//every navigationController has one of this item automatically configured to pop back
self.navigationItem.backBarButtonItem.target = self;
self.navigationItem.backBarButtonItem.action = @selector(backButtonDidPressed:);
}
return self;
}
a następnie można użyć metody wyboru jak poniżej. Pamiętaj, aby poprawnie odrzucić viewController, w przeciwnym razie kontroler nawigacji nie wyświetli się zgodnie z oczekiwaniami.
- (void)backButtonDidPressed:(id)aResponder {
//do your stuff
//but don't forget to dismiss the viewcontroller
[self.navigationController popViewControllerAnimated:TRUE];
}
Najprostszym sposobem byłoby umieszczenie kodu w ViewController, który zostanie wyświetlony po naciśnięciu przycisku Wstecz. Można użyć viewWillAppear
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//Your code here
}
pamiętać, że ta będzie również wykonywane, gdy widok jest przedstawiony z jakiegokolwiek innego powodu, więc jeśli chcesz to się zdarzyć tylko wtedy, gdy przycisk Wstecz jest wciśnięty trzeba użyć delegata: UINavigationControllerDelegate
że metoda zostanie wywołana, kiedy to pojawia się w ogóle vc, niekoniecznie tylko w wyniku właśnie wraca do niego – Colin
@Colin że jest poprawna, to zależy od dokładnego zachowania chce, on może użyć delegata, jeśli chce go tylko, gdy zostanie naciśnięty przycisk Wstecz. –
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 52, 31)];
[backButton setBackgroundImage:[UIImage imageNamed:@"BackButton.png"] forState:UIControlStateNormal];
//[backButton setTitle:@"CLOSE" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[backButton.titleLabel setFont:[UIFont boldSystemFontOfSize:14.0f]];
[backButton addTarget:self action:@selector(tappedBackButton:) forControlEvents:UIControlStateHighlighted];
UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = item;
[item release];
Tworzenie niestandardowego Wstecz i stosując że selektor wywołania metody, które chcesz. A także użyj [self.navigationController popViewControllerAnimated: TRUE];
- (void)tappedBackButton:(id)button
{
// call your method here
[self.navigationController popViewControllerAnimated:TRUE];
}
Należy pamiętać, że po wymianie przycisku Wstecz w ten sposób, utracisz "przesunięcie z lewej krawędzi, aby powrócić do funkcji rodzica viewController", która została wprowadzona w iOS 7 i jest przydatna skrót na iPhone 6 i 6+ –
Nie działa z self.navigationItem.rightBarButtonItem ... Podaj inne rozwiązanie – Vidhi
Chyba znalazłem „czysty” sposób, aby to zrobić:
Najpierw ustaw kontroler widoku za zgodne z protokołem UINavigationControllerDelegate
@interface MyViewController() <UINavigationControllerDelegate>
Następnie należy zdefiniować go jako delegata
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// Set this View Controller as the navigation controller delegate
self.navigationController.delegate = self;
}
Na koniec użyj tej metody z UINavigationControllerDeleg zjadł protokół:
#pragma mark - Navigation controller delegate
- (void)willMoveToParentViewController:(UIViewController *)parent
{
// If there is no parent, then it means that the view controller has been removed from the stack, which happens when the back button has been pressed
if (!parent) {
NSLog(@"Back button pressed");
// it can be useful to store this into a BOOL property
self.backButtonPressed = YES;
}
}
- 1. Jak zabić działanie po naciśnięciu przycisku Wstecz?
- 2. Symulowanie przycisk Wstecz na UINavigationController na iPhone
- 3. Zapisz stan po naciśnięciu przycisku Wstecz.
- 4. Jak ukryć klawiaturę po naciśnięciu przycisku wstecz UINavigationBar na ios
- 5. Widok listy: Jak pozostać wyróżniony/wybrany po naciśnięciu przycisku Wstecz?
- 6. opóźnienie po naciśnięciu przycisku na zestawie słuchawkowym w iphone
- 7. Jak wywołać makro po naciśnięciu przycisku Odśwież lub Odśwież wszystko?
- 8. bootstrap 3 zamknij Modal po naciśnięciu przycisku wstecz przeglądarki
- 9. Android: monit o zapisanie zmian po naciśnięciu przycisku Wstecz.
- 10. Wyjątek po naciśnięciu przycisku na facebooku logowanie
- 11. Jak mogę przywrócić funkcjonalność przycisku Wstecz w UINavigationController?
- 12. Android - Unikanie działania polegającego na zniszczeniu, zatrzymaniu lub zatrzymaniu go po naciśnięciu przycisku Wstecz
- 13. Ignorowanie UIGestureRecognizer po naciśnięciu przycisku
- 14. Zmiana koloru tekstu przycisku po naciśnięciu przycisku
- 15. Przycisk "Wstecz" po naciśnięciu ostatniego fragmentu:
- 16. ANDROID: Jak ustawić opóźnienie po naciśnięciu przycisku?
- 17. iOS - Przejście koloru paska nawigacji po naciśnięciu przycisku cofania
- 18. Odrzuć DatePickerDialog po naciśnięciu przycisku cofania
- 19. Zminimalizuj aplikację po kliknięciu przycisku Wstecz Android
- 20. sesja serwletów, po wylogowaniu, po naciśnięciu przycisku Wstecz przeglądarki ponownie wyświetlana jest bezpieczna strona
- 21. Jak uniemożliwić wywołanie onCreateView po naciśnięciu przycisku Wstecz w fragmencie w Androidzie
- 22. Android - Menu podręczne po naciśnięciu przycisku listy?
- 23. Przejdź do adresu URL po naciśnięciu przycisku OK po naciśnięciu przycisku
- 24. Jak wywołać metodę setUndecorated() po udostępnieniu ramki?
- 25. Powtórz czynność po naciśnięciu długiego przycisku.
- 26. Jak odzyskać stan na przycisku Wstecz, reagując
- 27. Ciągle zwiększaj wartość całkowitą po naciśnięciu przycisku.
- 28. Ustaw AVPlayerViewController odtwarzane po naciśnięciu przycisku
- 29. Mieć wiele komend po naciśnięciu przycisku
- 30. UISearchController odrzuca VC po naciśnięciu przycisku anulowania
Jedna różnica między nimi polega na tym, że pierwsze rozwiązanie (to jest "viewWillDisappear") jest wywoływane podczas przechodzenia wstecz lub do przodu przez stos nawigacyjny. Drugie rozwiązanie jest po prostu na powrót. – Matthew
To zwykle nie działa, ponieważ okaże się, że backBarButtonItem jest zerowe, chyba że wyraźnie przypiszesz do niego przycisk. W moim doświadczeniu i tak, zarówno leftBarButtonItem i backBarButtonItem były zerowe. – Diziet
to nie działa –