如何在更多部分中获取 UITabBarItem 的标题?

Posted

技术标签:

【中文标题】如何在更多部分中获取 UITabBarItem 的标题?【英文标题】:How to get title of UITabBarItem in the More section? 【发布时间】:2010-05-23 22:36:27 【问题描述】:

我有一个UITabBarControllerDelegate 方法来确定UITabBarItem 的标题并相应地执行一些操作。这适用于我的UITabBar 中的项目,但是当我单击更多按钮时,我的UITabBarItems 的其余部分位于UITableView 中。如何确定更多部分的标题?

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


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

【问题讨论】:

【参考方案1】:

每当你在你的UITabBarController中选择一个视图控制器,你提到的方法就会被调用,最重要的是,当前显示的视图控制器会作为参数传递给你;然后您可以使用以下代码查找控制器的类和标题,包括“更多”控制器:

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

    NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
    NSLog(@"controller title: %@", viewController.title);

在快速测试中,只需在 Xcode 中添加几个控制器,这就是您在控制台中得到的:

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

另一方面,当您选择“更多”列表中的控制器时,您不会在 UITabBarControllerDelegate 方法中收到通知(奇怪,恕我直言)。为了帮助您在选择该列表中的控制器时收到通知,您可以执行以下操作:

- (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);
    

当然,您的类也应该实现 UINavigationControllerDelegate 协议。

这是示例运行的结果,使用上述代码并在 UITabBar 和“更多”列表中点击几次:

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)

希望这会有所帮助!

【讨论】:

以上是关于如何在更多部分中获取 UITabBarItem 的标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何将徽章添加到系统生成的“更多”UITabBarItem

iOS - 获取 UITabBarItem 的 UIImageView/UIImage 的框架

获取 UITabBarItem 图像的默认未选择 TintColor

如何将 UITabBarItem 标题更改为另一个 UITabBarItem 的标题?

iOS:如何在 UITabBarItem 中添加下划线

如何在 iOS 4 中更改 UITabBarItem 中文本的颜色