2010-05-23 20 views
8

Tengo un método UITabBarControllerDelegate que determina el título del UITabBarItem y hace algo en consecuencia. Esto funciona bien para los artículos en mi UITabBar, pero cuando hago clic en el botón Más el resto de mi UITabBarItems están en un UITableView. ¿Cómo puedo determinar el título en la sección Más?¿Cómo obtener el título de UITabBarItem en la sección Más?

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    if ([self.tabBarController.selectedViewController.title isEqualToString:@"All"]) { 
     //do something 
    } 
} 

Respuesta

10

Cada vez que seleccione un controlador de vista en su UITabBarController, el método que mencionas se llama, y ​​lo más importante, el controlador de vista mostrada actualmente se pasará a usted como parámetro; a continuación, puede utilizar el siguiente código para encontrar la clase y el título del controlador, incluyendo el "más" controlador:

- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController 
{ 
    NSLog(@"controller class: %@", NSStringFromClass([viewController class])); 
    NSLog(@"controller title: %@", viewController.title); 
} 

En una prueba rápida, simplemente añadiendo un par de controladores en Xcode, esto es lo que obtener en la consola:

2011-03-28 09:13:21.795 TabTest[39015:207] controller class: UIViewController 
2011-03-28 09:13:21.797 TabTest[39015:207] controller title: (null) 
2011-03-28 09:13:23.922 TabTest[39015:207] controller class: UITableViewController 
2011-03-28 09:13:23.925 TabTest[39015:207] controller title: (null) 
2011-03-28 09:13:24.505 TabTest[39015:207] controller class: UITableViewController 
2011-03-28 09:13:24.506 TabTest[39015:207] controller title: (null) 
2011-03-28 09:13:24.945 TabTest[39015:207] controller class: UIMoreNavigationController 
2011-03-28 09:13:24.945 TabTest[39015:207] controller title: More 

por otro lado, cuando se selecciona un controlador dentro la lista de "más", no se le notificará en su método UITabBarControllerDelegate (raro, en mi humilde opinión). Para ayudarle a obtener notificaciones cuando se selecciona controladores en esa lista, se puede hacer lo siguiente:

- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController 
{ 
    NSLog(@"controller class: %@", NSStringFromClass([viewController class])); 
    NSLog(@"controller title: %@", viewController.title); 

    if (viewController == tabBarController.moreNavigationController) 
    { 
     tabBarController.moreNavigationController.delegate = self; 
    } 
} 

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if (navigationController == self.tabBarController.moreNavigationController) 
    { 
     NSLog(@"more controller class: %@", NSStringFromClass([viewController class])); 
     NSLog(@"more controller title: %@", viewController.title); 
    } 
} 

su clase también debe implementar el protocolo UINavigationControllerDelegate, por supuesto.

Este es el resultado de un análisis de la muestra, utilizando el código de arriba y tocando un par de veces en el UITabBar y la lista de "más":

2011-03-28 09:27:42.496 TabTest[39113:207] controller class: UIViewController 
2011-03-28 09:27:42.498 TabTest[39113:207] controller title: (null) 
2011-03-28 09:27:44.306 TabTest[39113:207] controller class: UIMoreNavigationController 
2011-03-28 09:27:44.307 TabTest[39113:207] controller title: More 
2011-03-28 09:27:44.310 TabTest[39113:207] more controller class: UIMoreListController 
2011-03-28 09:27:44.311 TabTest[39113:207] more controller title: More 
2011-03-28 09:27:45.632 TabTest[39113:207] more controller class: SecondViewController 
2011-03-28 09:27:45.634 TabTest[39113:207] more controller title: (null) 
2011-03-28 09:27:47.156 TabTest[39113:207] more controller class: UIMoreListController 
2011-03-28 09:27:47.156 TabTest[39113:207] more controller title: More 
2011-03-28 09:27:48.581 TabTest[39113:207] controller class: UITableViewController 
2011-03-28 09:27:48.582 TabTest[39113:207] controller title: (null) 

Espero que esto ayude!

Cuestiones relacionadas