Potrzebuję wykonać pewne czynności, gdy mój kontroler widoku jest zarówno popychany, jak i wyskakiwany z poziomu stosu nawigacji, ale nie chcę używać widoku/widokuapid/viewdilldisappear/viewdiddisappear ponieważ obejmują one przypadki poza tym, kiedy kontroler widoku jest popychany/popping. Czy jest to właściwy sposób, aby użyć tego, aby użyć delegata nawigacjacontroller i navigationController: didShowViewController: animated: i navigationController: willShowViewController: animated:? Jeśli nie, w jaki sposób najlepiej to osiągnąć?Jak zostać ostrzeżonym, kiedy kontroler uiviewclipler jest pchnięty/wyskakuje ze stosu nawigacji
Odpowiedz
Aby dowiedzieć się, kiedy jest wciśnięty, można użyć
UINavigationControllerDelegate
i wdrożenie
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
Ta metoda zadziała gdy viewcontroller jest wpychana do stosu nawigacji i za każdym razem, gdy kontroler podglądu na górze jest wyskakiwany, co ujawnia go ponownie. Musisz więc użyć flagi, aby dowiedzieć się, czy została ona jeszcze zainicjowana, jeśli nie oznacza to, że została po prostu wypchnięta.
Aby dowiedzieć się, kiedy to zostało pojawiło użyć tej odpowiedzi:
Możesz wypróbować metody delegatów UINavigationController, które wywołują, gdy obiekt zostanie naciśnięty lub pop ze stosu kontrolera nawigacyjnego.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
Zawsze można stworzyć prosty podklasę UINavigationController i owinąć metody nadklasy, tak aby ustawić flagę przed nazywając je:
ActionNavigationController.h
#import <UIKit/UIKit.h>
@interface ActionNavigationController : UINavigationController
@property (nonatomic, readonly) BOOL pushing;
@end
ActionNavigationController.m
#import "ActionNavigationController.h"
@implementation ActionNavigationController
@synthesize pushing = _pushing;
-(void)pushViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = YES;
[super pushViewController:viewController animated:animated];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popViewControllerAnimated:animated];
}
- (NSArray *)popToViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = NO;
return [super popToViewController:viewController animated:animated];
}
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popToRootViewControllerAnimated:animated];
}
@end
Jak pushing
oceni do NO
przypadku jeśli nic się nie dzieje, oczekuje się, że kod ten należy uzyskać od UINavigationControllerDelegate.
Oto przykład wykryć, gdy kontroler widoku jest pchany na stosie nawigacji nadrzędnymi -viewWillAppear:
i trzasnął nadrzędnymi -viewWillDisappear:
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.isMovingToParentViewController) {
NSLog(@"view controller being pushed");
}
}
-(void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.isMovingFromParentViewController) {
NSLog(@"view controller being popped");
}
}
można zrobić coś takiego w willShowViewController
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if self.navigationController!.viewControllers.contains(self){
print ("push")
} else {
print ("pop")
}
}
Zachowaj ostrożność, aby użyć
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
Jeśli machnięcia użytkownik od krawędzi do prawej dla popping widoku kontrolera (a nie faktycznie pop go), będzie powoływać powyżej funkcji delegata ale nie poniżej funkcji
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated;
Proszę odnieść się do https://gist.github.com/nonamelive/9334458
- 1. Ukryj dolny pasek Kontroler nawigacji
- 2. Kątowe - wykrywanie, kiedy kontroler jest "wyładowany"
- 3. iOS: Xcode 4.2 i kontroler nawigacji
- 4. jak usunąć stronę z nawigacji stosu - C# Windows 8
- 5. Wartość minimalna ze stosu
- 6. Jak określić, która czcionka ze stosu CSS jest używana?
- 7. Pushing kontroler nawigacji po modalne kontrolera widoku przedstawiono
- 8. C#: jak ukryć metodę ze śledzenia stosu?
- 9. Jak używać różnych wersji ghc ze stosu?
- 10. Jak usunąć wszystkie działania ze stosu?
- 11. Cofanie widoku stosu ze scenorysu
- 12. Uzyskiwanie śladu stosu z SBT ze Scala
- 13. Prawdopodobny błąd na iPada dla UIDocumentInteractionController: presentPreviewAnimated nie jest wciśnięty do stosu nawigacji
- 14. Messing ze stosu w montażu i C++
- 15. Jak określić, kiedy moja aplikacja ma zostać zakończona w tle?
- 16. Jak określić, kiedy kontroler wznowił działanie z tła?
- 17. Kontroler MVC korzystający ze strumienia odpowiedzi
- 18. dodanie segmentacji kontrolę ze w pasek nawigacji
- 19. Czyszczenie szumu ze śladu stosu Java
- 20. Jak są dostępne zmienne lokalne funkcji ze stosu?
- 21. Jak podklasować kontroler nawigacyjny podczas korzystania ze scenorysów?
- 22. Kiedy jest char * bezpieczny dla aliasingu ze ścisłym wskaźnikiem?
- 23. Jak ograniczyć kontroler orientacji na widok w iOS7 w hierarchii kontrolera nawigacji?
- 24. Kiedy ustawiono kontroler widoku nadrzędnego/prezentującego na sterowniku widoku modalnego?
- 25. Xcode: Wykrywanie gdy kontroler nawigacyjny realizowane „Wstecz” jest wciśnięty
- 26. Jak wydrukować stos stosu StackOverflowException
- 27. Kiedy jest InvocationTargetException.getCause() null?
- 28. Jak zresetować kontroler UINavigationController?
- 29. Jak wykryć, czy pamięć jest ze stosu? (nie sterty lub zmienna statyczna)
- 30. Kiedy powinien zostać użyty plik dimens.xml w systemie Android?
'Overriding' jest znacznie lepsze słowo. – noob