Comment obtenir visibles viewController de délégué d'application lors de l'utilisation de storyboard?
J'ai quelques viewControllers
, et je n'utilise pas NavigationController
.
Comment puis-je obtenir visibles vue contrôleur délégué d'application de méthodes (p. ex. applicationWillResignActive
)?
Je sais comment le faire à partir de NSNotification
, mais je pense que c'est de la mauvaise façon.
Vous devez vous connecter pour publier un commentaire.
Cela devrait le faire pour vous:
@aviatorken89 réponse a bien fonctionné pour moi. J'ai eu à le traduire pour Swift
pour quiconque de commencer avec Swift:
Mis à jour pour Swift 3:
Vieille réponse:
return rootViewController!
àreturn rootViewController
, puisque l'on peut être nul.currentViewController
? Par exemple, si je voulais direif currentViewController == someViewController { //do this } else { //do that}
est-il un moyen? L'impression de la variable donne le nom, mais ajoute un identifiant qui n'est pas maintenu entre les générations.let currentViewController = getVisibleViewController(nil) if currentViewController.isKindOfClass(YourViewControllerClass) { ... } else ...
if NSStringFromClass((currentViewController?.classForCoder)!) == "appname.theViewControllerOfInterest"....
Semble fonctionner pour autant.Nous l'avons implémenté comme un UIApplication extension:
Ici est une réponse à Swift 4 qui est très similaire à la accepté de répondre, mais avec quelques améliorations:
Ne tombent pas en panne dans l'étrange cas, c'est à dire quand une barre d'onglet contrôleur n'a pas été sélectionné-vue-contrôleur.
AppDelegate
, vous appelez avecAppDelegate.visibleViewController
.Ici est récursive, le protocole approche orientée en Swift. Peut être étendue à des types personnalisés, mais tout type de sous-classe UIViewController devrait travailler avec le code ci-dessous.
Les meilleures recommandations ici fonctionne ok dans de nombreux scénarios pour la 'deviner' solution, mais avec quelques ajustements mineurs, nous pouvons obtenir une solution plus complète que ne pas compter sur votre application afficher la hiérarchie de la mise en œuvre.
1) Cocoa Touch de vue de la hiérarchie permet à plusieurs enfants à être présent et visible à la fois, de sorte que nous devons au lieu de demander le courant d'affichage visible des contrôleurs (au pluriel) et de gérer les résultats en conséquence
2)
UINavigationController
s etUITabBarController
s sont couramment utilisés dans les applications iOS, mais ils ne sont pas le seul type de conteneur affichage des contrôleurs. UIKit fournit également de l'UIPageViewController
,UISplitViewController
, et vous permet d'écrire votre propre conteneur de vue des contrôleurs.3) Nous voulons probablement ignorer la liste des modaux et des types spécifiques de vue contrôleurs, tels
UIAlertController
s ou un intégré personnalisé enfant-viewcontroller.Voici une Swift 2.3 mise en œuvre de @ProgrammierTier réponse comme une extension d'un UIViewController
Pour l'obtenir à partir
applicationWillResignActive
Dans mon cas, j'ai Tabbar contrôleur de gestion, puis de Navigation controller pour chaque Onglet espère que cela aide quelqu'un
Voici juste un petit correctif inspiré de @krcjr89 de réponse. Accepté la réponse ne va pas tout le chemin en bas de la navigation. Par exemple, si vous avez une manette de navigation embarqués dans l'onglet de la barre de contrôleur, vous n'aurez pas à le visible-vue-contrôleur, mais la manette de navigation.
J'ai fait une extension de UIApplication comme @Christian, ce qui fait le plus de sens.
Une version modifiée d'une réponse précédente à l'aide de UIViewController catégorie en ObjC:
UIViewController+VisibleViewController.h
UIViewController+VisibleViewController.m
AppDelegate.m
modifié à partir de troop231