Tengo una aplicación de barra de pestañas, con muchas vistas. ¿Hay alguna manera de saber si un particular UIViewController
es visible actualmente desde dentro UIViewController
? (buscando una propiedad)
ios
uiview
uiviewcontroller
uiwindow
Rob Bonner
fuente
fuente
Respuestas:
La propiedad de ventana de la vista no es nula si una vista está actualmente visible, así que verifique la vista principal en el controlador de vista:
Invocar el método de vista hace que la vista se cargue (si no está cargada), lo cual es innecesario y puede ser indeseable. Sería mejor verificar primero para ver si ya está cargado. Agregué la llamada a isViewLoaded para evitar este problema.
Desde iOS9 se ha vuelto más fácil:
O si tiene un UINavigationController que administra los controladores de vista, puede verificar su propiedad visibleViewController en su lugar.
fuente
topViewController
.Aquí está la solución de @progrmr como
UIViewController
categoría:fuente
Hay un par de problemas con las soluciones anteriores. Si está utilizando, por ejemplo, a
UISplitViewController
, la vista maestra siempre devolverá verdadero paraEn cambio, tome este enfoque simple que parece funcionar bien en la mayoría, si no en todos los casos:
fuente
Para aquellos de ustedes que buscan una versión Swift 2.2 de la respuesta:
y Swift 3 :
fuente
Para presentaciones modales en pantalla completa o en contexto, "es visible" podría significar que está en la parte superior de la pila del controlador de vista o simplemente visible pero cubierto por otro controlador de vista.
Para verificar si el controlador de vista "es el controlador de vista superior" es bastante diferente de "es visible", debe verificar la pila del controlador de vista del controlador de navegación del controlador de vista.
Escribí un código para resolver este problema:
fuente
isViewLoaded
es una propiedad desde Swift 3.0.Desea usar la propiedad de
UITabBarController
'sselectedViewController
. Todos los controladores de vista conectados a un controlador de barra de pestañas tienen untabBarController
conjunto de propiedades, por lo que puede, desde cualquiera de los códigos de los controladores de vista:fuente
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
Hice una extensión rápida basada en la respuesta de @progrmr.
Le permite verificar fácilmente si hay un
UIViewController
en la pantalla de esta manera:La extensión:
fuente
Para mis propósitos, en el contexto de un controlador de vista de contenedor, he encontrado que
funciona bien.
fuente
si está utilizando un UINavigationController y también desea manejar vistas modales, lo siguiente es lo que uso:
fuente
El enfoque que utilicé para un controlador de vista presentado modal fue verificar la clase del controlador presentado. Si el controlador de vista presentado fuera
ViewController2
entonces ejecutaría algún código.fuente
Encontré esas funciones en
UIViewController.h
.Tal vez las funciones anteriores pueden detectar si
ViewController
aparece o no.fuente
XCode 6.4, para iOS 8.4, ARC habilitado
Obviamente muchas formas de hacerlo. El que me ha funcionado es el siguiente ...
Esto se puede usar en cualquier controlador de vista de la siguiente manera,
Si llama a esta propiedad
-(void)viewDidLoad
obtiene 0, entonces si llama a esto después de-(void)viewDidAppear:(BOOL)animated
obtener 1.Espero que esto ayude a alguien. ¡Gracias! Salud.
fuente
Si está utilizando un controlador de navegación y solo quiere saber si está en el controlador activo y superior , utilice:
Esta respuesta se basa en el comentario de @mattdipasquale .
Si tiene un escenario más complicado, consulte las otras respuestas anteriores.
fuente
puedes consultarlo por
window
propiedadfuente
Necesitaba esto para verificar si el controlador de vista es el controlador de vista actual, lo hice comprobando si hay algún controlador de vista presentado o empujado a través del navegador, lo estoy publicando en caso de que alguien necesite tal solución:
fuente
Utilizo esta pequeña extensión en Swift 5 , lo que hace que sea simple y fácil verificar cualquier objeto que sea miembro de UIView .
Entonces, solo lo uso como una simple comprobación de declaración if ...
¡Espero que ayude! :)
fuente