2011-01-31 15 views
6

Tengo una configuración UITabBarController con 2 UINavigationControllers.Haciendo doble clic sobre UITabBarControllers Tab va a la raíz del controlador de navegación

Un UINavigationController tiene un UIViewController, el otro UINavigationController tiene dos UIViewControllers. Si luego navega hasta el segundo UIViewController y hace clic en la pestaña que ya está seleccionada, lo llevará a la raíz del UINavigationController (este sería el primer UIViewController).

¿Hay una manera de evitar que esto suceda? No quiero que el usuario pueda hacer clic en una pestaña ya seleccionada para ir a la raíz del Controlador de navegación.

Respuesta

17

Para hacer esto es necesario implementar una función de delegado de la aplicación para recoger las llamadas de barra de pestañas de delegado.

En el archivo delegate.m aplicación, en el método didfinishlaunching, añada esta línea

[tabBarController setDelegate:self]; 

luego implementar este método (también en delegado de la aplicación):

- (BOOL)tabBarController:(UITabBarController *)theTabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return (theTabBarController.selectedViewController != viewController); 
} 

Esto se llama como parte del protocolo de delegación de pestañas y detendrá la selección de una pestaña si ya es la seleccionada.

Espero que ayude.

+0

esto funciona, excepto mi tabBarController era una parte de otro ViewController. Entonces, en lugar de configurar el delegado dentro del delegado de la aplicación, lo configuro dentro del ViewController apropiado. ¡Gracias! – Mausimo

+1

En lugar de poner esto en el delegado de la aplicación, subclassed TabBarViewController y establecer el delegado de la subclase para ser self.delegate = self. Luego, en el guión gráfico elijo la subclase de mi tabbarviewcontroller. – nearpoint

Cuestiones relacionadas