11
votes

Déterminez si la vue qui apparaît a été poussée ou est venue du bouton arrière dans la barre de navigation

Y a-t-il un moyen de dire si un nouveau contrôleur provient d'un bouton de navigation arrière ou a été poussé sur la pile? Vous souhaitez recharger des données uniquement pour appuyer sur la pile de navigation, non sur une touche arrière, appuyez sur.


0 commentaires

3 Réponses :


1
votes

Si votre poussée inclut également l'instanciation du contrôleur d'affichage, placez votre logique Push-seule dans ViewDidLoad . Il ne sera pas appelé à l'arrière car il a déjà été chargé.


3 commentaires

Ne pouvait-il pas être appelé sur le dos si la vue a été déchargée en raison de la pression de la mémoire?


dépend si vous le déchargez ou non


Vous pouvez définir un ivar Bool appelé instancié, puis la définir sur Oui à la fin de la vieilleDidloadload. Une fois que cela est défini sur Oui, ne faites pas ce que vous voulez seulement arriver une fois.



1
votes

Vous pouvez implémenter l'UINAVIGATIONCONTROLLERDELEGATEGATE ET RÉLUMER LE `NAVIGATIONCONTROLLER: DIDSHOWVIEWCONTROLLER: Animated: 'Méthode. Vous devrez ensuite vérifier le contrôleur d'affichage renvoyé pour déterminer si vous êtes revenu du contrôleur d'affichage attendu.

- (void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated
{
    if (yourPushedViewController == viewController)
    {
        // Do something
    }
}


0 commentaires

23
votes

à partir de iOS 5.0 Vous pouvez le faire:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (self.isBeingPresented || self.isMovingToParentViewController) {
        // "self" is being shown for the 1st time, not because of a "back" button.
    }
}


4 commentaires

Cela ne fonctionnera pas si votre contrôleur de vue est le premier contrôleur d'affichage sur l'onglet d'un contrôleur de barre d'onglets. Cela fonctionnera la première fois, mais à la suite de la commutation à l'onglet d'utilisation apparaîtra comme s'il s'agissait d'une action arrière, car aucun isbeingpresenté ni ismovingtoparentviewController sera vrai. Un tel cas est rare, mais si c'est votre situation, consultez Stackoverflow.com/a/40801594/5152481


Cela ne semble pas fonctionner dans iOS10 - IsbeingPresenté et IsmovingToparentViewController sont tous deux faux la première fois que mon contrôleur d'évaluation est présenté.


@Kendallhelmsettergelner appelez-vous ceux-ci dans ViewWill | Didappear ou ViewWill | Diddisappear ? Ils ne travaillent que dans ces 4 méthodes.


@MADDY - Oui, je parle de la vue standardWillappear: méthode. Les deux valeurs sur la VC actuelle sont venues de faux dans IOS10.