L'obtention de référence vers le haut-la plupart affichage/fenêtre dans une application iOS
Je suis de la création d'un cadre réutilisable pour l'affichage des notifications d'une application iOS. J'aimerais que la notification en vue d'être ajoutée sur le dessus de tout le reste de l'application, comme une sorte de UIAlertView. Quand je init le manager à l'écoute pour NSNotification événements et ajoute des points de vue en réponse, j'ai besoin d'obtenir une référence vers le haut-la plupart affichage dans l'application. C'est ce que j'ai en ce moment:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Serait-ce de travailler pour n'importe quel application iOS ou est-ce plus sûr/meilleur moyen pour obtenir la vue d'en haut?
Vous devez vous connecter pour publier un commentaire.
Généralement vous donner la vue d'en haut, mais il n'y a aucune garantie qu'il est visible pour l'utilisateur. Il pourrait être hors de l'écran, ont un alpha de 0.0, ou peut être ont une taille de 0 x 0 par exemple.
Il se pourrait aussi que la keyWindow n'a pas de sous-vues, de sorte que vous devriez tester en premier. Ce serait inhabituel, mais il n'est pas impossible.
UIWindow est une sous-classe de UIView, donc si vous voulez vous assurer que votre avis est visible pour l'utilisateur, vous pouvez l'ajouter directement à la keyWindow à l'aide de
addSubview:
et il sera instantanément la partie supérieure la plus vue. Je ne suis pas sûr si c'est ce que vous cherchez à faire. (En fonction de votre question, il semble, comme vous le savez déjà.)Chaque fois que je veux afficher une certaine superposition sur le dessus de tout le reste, je viens de l'ajouter sur le dessus de la Fenêtre de l'Application directement:
(null)
dans mon iOS 8 app (storyboards problème?) Tous les conseils? Merci! (Note:(null)
retourné à la fois àviewDidLoad
etviewWillAppear:
temps.viewDidAppear:
est trop tard.Il y a deux parties du problème: la fenêtre du Haut, vue d'en haut sur la partie supérieure de la fenêtre.
Toutes les réponses raté le haut de la fenêtre de la partie. Mais
[[UIApplication sharedApplication] keyWindow]
n'est pas garanti que la partie supérieure de la fenêtre.Haut de la fenêtre. Il est très peu probable qu'il y aura deux fenêtres avec la même
windowLevel
coexister pour une application, afin de faire le tri de toutes les fenêtres parwindowLevel
et obtenir le plus haut en un.Vue de haut sur la partie supérieure de la fenêtre. Juste pour être complet. Comme l'a déjà souligné dans la question:
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Effectivement il pourrait y avoir plus d'un UIWindow dans votre application. Par exemple, si un clavier est sur l'écran, puis
[[UIApplication sharedApplication] windows]
contiendra au moins deux fenêtres (votre clé-fenêtre et la fenêtre de clavier).Donc, si vous voulez que votre point de vue à apparaître ontop de deux d'entre eux, alors vous devez faire quelque chose comme:
(En supposant que lastObject contient la fenêtre avec la plus haute windowLevel priorité).
Je m'en tiens à la question que le titre des etats, et non de la discussion. La vue est top visible sur n'importe quel point?
Peut être utilisé directement avec tout UIWindow comme syndic ou de tout UIView comme récepteur.
Si vous ajoutez un chargement de vue (un indicateur d'activité de la vue par exemple), assurez-vous que vous avez un objet de UIWindow classe. Si vous montrez une fiche action juste avant de vous montrer votre chargement de vue, la
keyWindow
sera leUIActionSheet
et pasUIWindow
. Et depuis la fiche action va disparaître, le chargement de la vue s'en aller avec elle. Ou est ce que a me causer des problèmes.Si votre application ne fonctionne qu'en mode portrait, c'est assez:
Et votre point de vue n'apparaît pas au cours du clavier et de la barre d'état.
Si vous voulez obtenir un premier avis que plus de clavier ou de la barre d'état, ou que vous voulez le plus haut point de vue peut faire tourner correctement avec les appareils, s'il vous plaît essayer ce cadre:
https://github.com/HarrisonXi/TopmostView
Il prend en charge iOS7/8/9.
Suffit d'utiliser ce code si vous souhaitez ajouter une vue au-dessus de tout dans l'écran.
essayer cette