Comment puis-je obtenir une référence à l'actuel UINavigationController?
En Objective-C, quelle est la meilleure façon d'obtenir une référence à l'actuel UINavigationController? Je voudrais accéder à partir de n'importe quelle classe qui ne peut pas avoir une référence à un UIController, délégué, ou quoi que ce soit d'autre.
Est-il un moyen d'obtenir le courant UINavigationController? Dois-je ajouter quelque chose à ma demande délégué, et de les récupérer?
Vous pouvez créer une propriété dans appDelegate, créer de la vue de la base de contrôleur de la sous-classe, remplacer viewWillAppear et là
Mais l'accès à partir de " toute la classe de freiner MVC, pourquoi votre vue personnalisée devez savoir à propos de la navigation?..
Dans ce cas particulier, j'ai peut-être besoin de pousser sur un compte de connexion UIController. J'ai des web services en cours d'exécution asynchrone de travail de tous types de choses. Si l'on reçoit un problème d'Authentification, il doit afficher une boîte d'avoir le login de l'utilisateur.
Si votre manette de navigation est la fenêtre racine de vue-contrôleur, vous pouvez y accéder avec
Il serait préférable d'utiliser un NSNotification à cette fin, plutôt que de briser le paradigme MVC.
appDelegate.currentNavigationController = self.navigationController;
Mais l'accès à partir de " toute la classe de freiner MVC, pourquoi votre vue personnalisée devez savoir à propos de la navigation?..
Dans ce cas particulier, j'ai peut-être besoin de pousser sur un compte de connexion UIController. J'ai des web services en cours d'exécution asynchrone de travail de tous types de choses. Si l'on reçoit un problème d'Authentification, il doit afficher une boîte d'avoir le login de l'utilisateur.
Si votre manette de navigation est la fenêtre racine de vue-contrôleur, vous pouvez y accéder avec
[[UIApplication sharedApplication] keyWindow] rootViewController];
Il serait préférable d'utiliser un NSNotification à cette fin, plutôt que de briser le paradigme MVC.
OriginalL'auteur John Fowler | 2013-01-25
Vous devez vous connecter pour publier un commentaire.
Comme il s'avère, vous pouvez l'obtenir, mais avec un peu de syntaxe à point, de toute UIView/UIViewController descendant.
Si vous utilisez un objet qui descend d'une autre classe, la même chose est vrai, sauf que vous devez passer par
UIApplication
Bien sûr, ces deux pause MVC dans une grande manière, et il est certainement recommandé que toute la logique qui doit toucher le "par défaut de la manette de navigation" à la racine de la vue-contrôleur.
[UIApplication sharedApplication].keyWindow.rootViewController
m'a donné est parfaitement utilisable UINavigationController.[UIApplication sharedApplication].keyWindow.rootViewController.navigationController
sur l'autre main est retournée néant! Donc, si votre vue de la racine est un UINavigationController, vous pourriez avoir à ajuster un peu.qui renvoie nil
Cela fonctionne Wain réponse
OriginalL'auteur CodaFi
Swift 4:
OriginalL'auteur Naishta