Estoy creando un marco reutilizable para mostrar notificaciones en una aplicación de iOS. Me gustaría que las vistas de notificación se agreguen encima de todo lo demás en la aplicación, algo así como un UIAlertView. Cuando inicio el administrador que escucha los eventos de NSNotification y agrega vistas en respuesta, necesito obtener una referencia a la vista superior en la aplicación. Esto es lo que tengo en este momento:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
¿Funcionaría esto para cualquier aplicación de iOS o es una forma más segura / mejor de obtener la vista superior?
fuente
(null)
a mi aplicación iOS-8 (¿problema con los guiones gráficos?) ¿Alguna sugerencia? ¡Gracias! (Nota:(null)
devuelto tanto a la horaviewDidLoad
como a laviewWillAppear:
hora.viewDidAppear:
Es demasiado tarde.Hay dos partes del problema: ventana superior, vista superior en la ventana superior.
Todas las respuestas existentes fallaron en la parte superior de la ventana. Pero
[[UIApplication sharedApplication] keyWindow]
no se garantiza que sea la ventana superior.Ventana superior. Es muy poco probable que
windowLevel
coexistan dos ventanas con la misma para una aplicación, por lo que podemos ordenar todas las ventanaswindowLevel
y obtener la más alta.Vista superior de la ventana superior. Solo para estar completo. Como ya se señaló en la pregunta:
fuente
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
En realidad, podría haber más de una UIWindow en su aplicación. Por ejemplo, si un teclado está en pantalla
[[UIApplication sharedApplication] windows]
, contendrá al menos dos ventanas (su ventana de teclas y la ventana de teclado).Entonces, si desea que su vista aparezca encima de ambos, debe hacer algo como:
(Suponiendo que lastObject contiene la ventana con la mayor prioridad windowLevel).
fuente
Me atengo a la pregunta como dice el título y no a la discusión. ¿Qué vista es visible desde arriba en cualquier punto dado?
Puede usarse directamente con cualquier UIWindow como receptor o cualquier UIView como receptor.
fuente
Si está agregando una vista de carga (una vista de indicador de actividad, por ejemplo), asegúrese de tener un objeto de la clase UIWindow. Si muestra una hoja de acción justo antes de mostrar su vista de carga,
keyWindow
será elUIActionSheet
y noUIWindow
. Y dado que la hoja de acción desaparecerá, la vista de carga desaparecerá con ella. O eso es lo que me estaba causando problemas.fuente
Si su aplicación solo funciona en orientación vertical, esto es suficiente:
Y su vista no se mostrará en el teclado ni en la barra de estado.
Si desea obtener una vista superior sobre el teclado o la barra de estado, o si desea que la vista superior pueda rotar correctamente con los dispositivos, pruebe este marco:
https://github.com/HarrisonXi/TopmostView
Es compatible con iOS7 / 8/9.
fuente
Solo use este código si desea agregar una vista arriba de todo en la pantalla.
fuente
prueba esto
fuente
fuente