2010-12-30 19 views
6

Tengo un controlador de navegación dentro de una subclase personalizada del controlador de la barra de pestañas que creé.¿Hay eventos de barra de pestañas para notificar cuando alguien oculta/muestra la barra de pestañas?

Quiero saber desde dentro de la barra de pestañas (personalizada) cuando uno de los controladores que se muestran intenta ocultar o mostrar la barra de pestañas. (por ejemplo, cuando se empuja un VC que tiene su hidesBottomBarWhenPushed = YES en el controlador Nac).

En resumen, quiero recibir notificaciones de los eventos que ocultan/muestran la barra de pestañas, pero no pude encontrar nada en la referencia de Apple. Intenté buscar en UITabBar, UITabBarDelegate, UITabBarController y UITabBarControllerDelegate, pero parece que todos proporcionan funcionalidad relacionada con los elementos de la barra de pestañas.

Gracias de antemano.

Respuesta

0

UINavigationController Subclase e implementar el colocador detrás hidesBottomBarWhenPushed (o subclase de la subclase UIViewController directamente el método hidesBottomBarWhenPushed) y delegar la llamada al UITabBar (a través de una llamada directa o una NSNotification).

+0

No estoy seguro de que lo tengo. HidesBottomBarWhenPushed es una propiedad que representa un estado. La propiedad no contiene el código real que oculta la barra (la propiedad generalmente se establece antes de que un controlador se inserte en la pila nav vc). – nsof

9

Si está utilizando un controlador de barra de pestañas, UIKit establece explícitamente que cada instancia de controlador de navegación que se mostrará en el contexto del controlador de la barra de pestañas estará entre su propiedad viewControllers. Ahora, cada instancia de UINavigationController tiene un delegado, que define un método navigationController:willShowViewController:animated: que le permite saber cuándo un controlador de vista está insertado en él.

Al configurar su controlador de barra de pestañas como el delegado de cada controlador de navegación que se inserta en él, puede analizar si el controlador de vista que se está presionando tiene la propiedad hidesBottomBarWhenPushed y generar un evento cuando este sea el caso. El algoritmo utilizado para ocultar la barra de pestañas del controlador de la barra de pestañas es el siguiente: cuando se pulsa un controlador de vista en un controlador de navegación que está contenido en un controlador de barra de pestañas, si hay controlador de vista en la pila de navegación de la navegación controlador tiene el conjunto de propiedades hidesBottomBarWhenPushed, entonces la barra de pestañas debe estar oculta.

Por lo tanto, la barra de pestañas se oculta cuando se selecciona un controlador de navegación y uno de los controladores de vista en su pila tiene el conjunto de propiedades hidesBottomBarWhenPushed.

+0

cómo configurar el controlador de la barra de pestañas como el delegado del controlador de navegación? Estoy recibiendo un error. Estoy intentando 'auto.navigationController? .delegate = self.tabBarController' Error -' No se puede asignar el valor de tipo UITabBarController? para escribir UINavigationControllerDelegate? ' –

+0

Error resuelto usando' self.navigationController? .delegate = self.tabBarController as! MyCustomTabBarViewController ' –

Cuestiones relacionadas