J'ai une application de barre d'onglets, avec de nombreuses vues. Existe-t-il un moyen de savoir si un particulier UIViewController
est actuellement visible de l'intérieur du UIViewController
? (à la recherche d'une propriété)
ios
uiview
uiviewcontroller
uiwindow
Rob Bonner
la source
la source
Réponses:
La propriété window de la vue n'est pas nulle si une vue est actuellement visible, alors vérifiez la vue principale dans le contrôleur de vue:
L'appel de la méthode view provoque le chargement de la vue (si elle n'est pas chargée), ce qui est inutile et peut être indésirable. Il serait préférable de vérifier d'abord s'il est déjà chargé. J'ai ajouté l'appel à isViewLoaded pour éviter ce problème.
Depuis iOS9, il est devenu plus facile:
Ou si vous avez un UINavigationController gérant les contrôleurs de vue, vous pouvez vérifier sa propriété visibleViewController à la place.
la source
topViewController
.Voici la solution de @ progrmr en tant que
UIViewController
catégorie:la source
Il y a quelques problèmes avec les solutions ci-dessus. Si vous utilisez, par exemple, a
UISplitViewController
, la vue principale retournera toujours true pourAu lieu de cela, adoptez cette approche simple qui semble bien fonctionner dans la plupart, sinon tous les cas:
la source
Pour ceux d'entre vous qui recherchent une version Swift 2.2 de la réponse:
et Swift 3 :
la source
Pour une présentation modale sur plein écran ou sur contexte, "est visible" peut signifier qu'il est au-dessus de la pile du contrôleur de vue ou juste visible mais couvert par un autre contrôleur de vue.
Pour vérifier si le contrôleur de vue "est le contrôleur de vue de dessus" est assez différent de "est visible", vous devez vérifier la pile de contrôleur de vue du contrôleur de navigation du contrôleur de vue.
J'ai écrit un morceau de code pour résoudre ce problème:
la source
isViewLoaded
est une propriété depuis Swift 3.0.Vous voulez utiliser le
UITabBarController
de »selectedViewController
la propriété. Tous les contrôleurs de vue attachés à un contrôleur de barre d'onglets ont untabBarController
jeu de propriétés, vous pouvez donc, à partir de n'importe quel code des contrôleurs de vue:la source
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
J'ai fait une extension rapide basée sur la réponse de @ progrmr.
Il vous permet de vérifier facilement si un
UIViewController
est à l'écran comme ceci:L'extension:
la source
Pour mes besoins, dans le contexte d'un contrôleur de vue de conteneur, j'ai trouvé que
fonctionne bien.
la source
si vous utilisez un UINavigationController et souhaitez également gérer les vues modales, voici ce que j'utilise:
la source
L'approche que j'ai utilisée pour un contrôleur de vue présenté modal était de vérifier la classe du contrôleur présenté. Si le contrôleur de vue présenté l'était
ViewController2
, j'exécuterais du code.la source
J'ai trouvé ces fonctions
UIViewController.h
.Peut-être que les fonctions ci-dessus peuvent détecter l'
ViewController
apparition ou non.la source
XCode 6.4, pour iOS 8.4, compatible ARC
De toute évidence, de nombreuses façons de le faire. Celui qui a fonctionné pour moi est le suivant ...
Cela peut être utilisé dans n'importe quel contrôleur de vue de la manière suivante,
Si vous appelez cette propriété,
-(void)viewDidLoad
vous obtenez 0, alors si vous appelez cela après avoir-(void)viewDidAppear:(BOOL)animated
obtenu 1.J'espère que cela aide quelqu'un. Merci! À votre santé.
la source
Si vous utilisez un contrôleur de navigation et que vous voulez simplement savoir si vous êtes dans le contrôleur actif et le plus haut , utilisez alors:
Cette réponse est basée sur le commentaire de @mattdipasquale .
Si vous avez un scénario plus compliqué, consultez les autres réponses ci-dessus.
la source
vous pouvez le vérifier par
window
propriétéla source
J'en avais besoin pour vérifier si le contrôleur de vue est le contrôleur actuellement affiché, je l'ai fait en vérifiant s'il y a un contrôleur de vue présenté ou poussé via le navigateur, je le poste au cas où quelqu'un aurait besoin d'une telle solution:
la source
J'utilise cette petite extension dans Swift 5 , ce qui le rend simple et facile à vérifier pour tout objet qui est membre de UIView .
Ensuite, je l'utilise comme simple vérification de l'instruction if ...
J'espère que ça aide! :)
la source