2010-11-06 14 views
9

Mi aplicación tiene 3 elementos de barra de pestañas, cada uno asignado a un controlador de vista por separado. Mi problema es que el primer controlador es un controlador UINavigation, y tiene una profundidad de 3 niveles. No tengo ningún problema con la navegación, pero cuando hago clic en un elemento diferente de la barra de pestañas y luego cuando regreso al primer elemento de la barra de pestañas (el que tiene el controlador UINav), prefiero que vuelva a restablecerse el primer controlador en la secuencia de navegación.Restablecer UINavigationController al primer controlador cuando se hace clic en la barra de pestañas

He leído que usted tiene que hacer algo como:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    [[self navigationController] popViewControllerAnimated:NO]; 
} 

Pero no estoy seguro de donde debería poner este método. ¿Quién es el delegado del controlador de la barra de pestañas? Está configurado en AppDelegate ... ¿debería ir allí?

Gracias.

Respuesta

12

Claro, en su AppDelegate cuando se está creando la UITabBarController puede configurar el delegado del controlador de la barra de pestañas para ser auto (es decir, el AppDelegate). Luego puede poner el método tabBar: didSelectItem: en su AppDelegate y se debe invocar siempre que el usuario toque un UITabBarItem. Crearía una propiedad de variable de instancia en su AppDelegate y mantendría una referencia al UITabBarItem que se utiliza para la pestaña del controlador de navegación (llamémoslo tabBarItemForNavControllerTab). Usted también debe tener una referencia al controlador de navegación que vive en esa primera pestaña de manera que se puede controlar desde el AppDelegate (llamémoslo navControllerInFirstTab)

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    if (item != self.tabBarItemForNavControllerTab) { 
     [self.navControllerInFirstTab popToRootViewControllerAnimated:NO]; 
    } 
}

Usted puede utilizar popToRootViewControllerAnimated: en el UINavigationController vez de hacer estallar cada uno de la pila individualmente.

+0

Hmm ... eso tiene mucho sentido, pero parece que no puedo obtener el tabBar: didSelectItem: para responder (solo tengo una instrucción NSLog() allí y no aparece nada). Configuré [tabBarController setDelete: self]; pero nada aún. – rpheath

+2

Muy bien, lo descubrí. Tuve que usar '- (void) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController' en su lugar. ¡Gracias! – rpheath

Cuestiones relacionadas