Quand une vue est chargée, je veux voir si c'est parce que l'utilisateur a appuyé sur le bouton Précédent. Comment puis-je vérifier cela?
Réponses
Trop de publicités?La meilleure solution que j'ai trouvé pour détecter un UINavigationController touche back (retour) appuyez sur la touche (pré-iOS 5.0) est en vérifiant que le point de vue actuel contrôleur n'est pas présent dans le dans le de navigation du contrôleur de-vue-contrôleur de la pile.
Il est peut-être plus sûr de vérifier cette condition, en - (void)viewDidDisappear:(BOOL)animated
que logiquement, une fois que la méthode est appelée, elle serait extrêmement probable que le point de vue du contrôleur a été retiré de la pile.
Pré-iOS 5.0:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if (![[self.navigationController viewControllers] containsObject:self]) {
// We were removed from the navigation controller's view controller stack
// thus, we can infer that the back button was pressed
}
}
iOS 5.0+ vous pouvez utiliser -didMoveToParentViewController:
- (void)didMoveToParentViewController:(UIViewController *)parent
{
// parent is nil if this view controller was removed
}
UINavigationController a un delegate
bien que les questions délégué rappels. Veuillez voir le iOS de référence ici.
Le délégué ne pas avoir un "bouton" de rappel, mais au lieu de cela, il vous dit quand quelque chose va apparaître sur la pile de navigation. Lorsque vous appuyez sur la touche back, vous êtes le "popping" la vue de dessus contrôleur hors de la pile, donc il va vous dire que la vue est sur le point d'apparaître. Je pense que c'est le rappel que vous seriez à la recherche pour.
Vous pourriez avoir une logique simple pour vérifier si il est le point de vue contrôleur "intéressés", et puis vous pouvez envoyer une notification, et al.
C'est un peu différente de scénario, mais j'ai pensé que la solution pourrait aider les autres.
Dans ma situation, j'ai eu un UINavigationController dans un UIPopoverController. J'avais besoin de détecter si l'utilisateur a cliqué sur le bouton de retour, ou cliqué en dehors de la liste. Pour ce faire, j'ai vérifié le visibleViewController propriété dans viewWillDisappear. Si le point de vue du contrôleur est toujours le visibleViewController lors de la fermeture, puis la liste est en cours de fermeture par un autre moyen. Si le point de vue du contrôleur n'est pas le visibleViewController lors de la fermeture, puis le dos bouton a été pressé.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.navigationController.visibleViewController != self) {
<Do something since we're closing using something else>
} else {
<Do something since we're closing because of the back button>
}
}
J'ai essayé à l'aide de zach solution, mais isMovingFromParentViewController retourne vrai pour les deux cas.
J'ai vérifié cela fonctionne sous iOS 5+
J'espère que cette aide.
Créez un bouton de barre arrière personnalisé et définissez la cible,
Étape 1: Ajoutez ces méthodes à votre classe
- (void)backButtonClicked :(id)sender{
[self.navigationController popViewControllerAnimated:YES];
}
- (void)addBackBarButton{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 55, 35);
[button setTitle:@"back" forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
}
Étape 2: Appelez [self addBackBarButton]; dans la méthode viewDiDLoad
Vous obtiendrez l'action dans la méthode backButtonClicked . Vous pouvez jouer avec comme vous le souhaitez.
À votre santé!