为啥标签栏项目的徽章没有改变

Posted

技术标签:

【中文标题】为啥标签栏项目的徽章没有改变【英文标题】:why the badge of the tab bar item is not changed为什么标签栏项目的徽章没有改变 【发布时间】:2016-05-30 10:28:22 【问题描述】:

我正在尝试更改标签栏项目的徽章,但没有成功。我知道标签栏控制器负责控制标签栏。

但是,标签栏本身的一些内容可以由视图控制器管理,例如徽章

在我的代码中我尝试了这个,因为确实加载了

self.tabBarItem.badgeValue = "3"

但徽章中没有任何内容

然后我尝试了:

self.tabBarController?.tabBarItem.badgeValue = "3"

这不起作用,好吧,我知道为什么第二个代码不起作用,这与使用导航控制器而不是导航项更改导航控制器的标题相同。但我不知道为什么第一个代码不起作用

这是我的应用程序的层次结构,我在 TeamsTableViewController 中这样做,这是团队选项卡中的第一个视图控制器

【问题讨论】:

这是后台进程吗? 您是否尝试过 dispatch_async(dispatch_get_main_queue() 来更新 UI? @Sherin 我没有,但我不应该需要那个,因为我已经在处理主线程了。事实上,我所有的应用程序都在一个主线程上 使用 super.tabbarController 代替 self.tabbarcontroller 【参考方案1】:

在你的场景中,控制tabBarItem的是导航控制器而不是TableViewController,因为每个TabBarController都有一个viewControllers数组,每个viewControllers都与一个tabBarItem相关联。在您的情况下,tabBarController 有两个 viewController,它们是:

    团队导航控制器 团队视图控制器

所以团队视图导航控制器是控制标签栏项目的视图控制器。

这样做应该可以解决您的问题

self.navigationController?.tabBarItem.badgeValue = "3"

【讨论】:

【参考方案2】:

试试这个

var cart: UITabBarItem = super.tabBarController.viewControllers[yourIndex].tabBarItem()
cart.badgeValue = "3"

【讨论】:

【参考方案3】:

我知道这个问题很老了,但没有答案。正如威廉所说,您的导航控制器是控制 TabBarItem 的控制器。因此,为了访问它,您可以子类化您的 UINavigationController 并使 TabBarItem 成为该类的属性。然后您可以通过该属性访问 TabBarItem。例如:

@interface MyCustomNavController : UINavigationController
@property(weak, nonatomic)IBOutlet UITabBarItem *theTabBarItem;
@end

并从您的 TableController 使用以下命令访问它:

MyCustomNavController* navController=(MyCustomNavController*)self.navigationController;
navController.theTabBarItem.badgeValue=@"3";

【讨论】:

以上是关于为啥标签栏项目的徽章没有改变的主要内容,如果未能解决你的问题,请参考以下文章

如何调整标签栏徽章位置?

更新标签栏项目徽章值的延迟

如何为我的第 6 个标签栏项目设置徽章值?

在通知回调中设置时,标签不会出现在标签栏项目上

使用 UIAlertAction 快速增加标签栏徽章?

iOS7中的UITabBar徽章位置