Je crée un cadre réutilisable pour afficher des notifications dans une application iOS. J'aimerais que les vues de notification soient ajoutées par-dessus tout le reste de l'application, un peu comme un UIAlertView. Lorsque j'initie le gestionnaire qui écoute les événements NSNotification et ajoute des vues en réponse, je dois obtenir une référence à la vue la plus haute de l'application. Voici ce que j'ai en ce moment:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Cela fonctionnerait-il pour n'importe quelle application iOS ou est-ce un moyen plus sûr / meilleur d'obtenir la vue de dessus?
la source
(null)
mon application iOS-8 (problème de storyboards?) Des indices? Merci! (Remarque:(null)
renvoyé à la fois àviewDidLoad
et à l'viewWillAppear:
heure. IlviewDidAppear:
est trop tard.Il y a deux parties du problème: fenêtre supérieure, vue de dessus sur la fenêtre supérieure.
Toutes les réponses existantes ont manqué la partie supérieure de la fenêtre. Mais il
[[UIApplication sharedApplication] keyWindow]
n'est pas garanti que ce soit la fenêtre du haut.Fenêtre du haut. Il est très peu probable qu'il y ait deux fenêtres avec la même
windowLevel
coexistence pour une application, nous pouvons donc trier toutes les fenêtreswindowLevel
et obtenir la plus haute.Vue de dessus sur la fenêtre supérieure. Juste pour être complet. Comme déjà souligné dans la question:
la source
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
En fait, il peut y avoir plusieurs UIWindow dans votre application. Par exemple, si un clavier est à l'écran, il
[[UIApplication sharedApplication] windows]
contiendra au moins deux fenêtres (votre fenêtre de touches et la fenêtre de clavier).Donc, si vous voulez que votre vue apparaisse au-dessus des deux, vous devez faire quelque chose comme:
(En supposant que lastObject contient la fenêtre avec la priorité windowLevel la plus élevée).
la source
Je m'en tiens à la question comme l'indique le titre et non à la discussion. Quelle vue est visible en haut sur un point donné?
Peut être utilisé directement avec n'importe quelle UIWindow comme récepteur ou n'importe quelle UIView comme récepteur.
la source
Si vous ajoutez une vue de chargement (une vue d'indicateur d'activité par exemple), assurez-vous d'avoir un objet de la classe UIWindow. Si vous affichez une feuille d'action juste avant d'afficher votre vue de chargement, le
keyWindow
sera leUIActionSheet
et nonUIWindow
. Et puisque la feuille d'action disparaîtra, la vue de chargement disparaîtra avec elle. Ou c'est ce qui me posait des problèmes.la source
Si votre application ne fonctionne qu'en orientation portrait, cela suffit:
Et votre vue ne sera pas affichée sur le clavier et la barre d'état.
Si vous souhaitez obtenir une vue la plus haute sur le clavier ou la barre d'état, ou si vous voulez que la vue la plus haute puisse pivoter correctement avec les appareils, veuillez essayer ce cadre:
https://github.com/HarrisonXi/TopmostView
Il prend en charge iOS7 / 8/9.
la source
Utilisez simplement ce code si vous souhaitez ajouter une vue ci-dessus de tout ce qui se trouve à l'écran.
la source
essaye ça
la source
la source