为什么标签栏项目的徽章未更改

时间:2016-05-30 10:28:22

标签: ios swift uinavigationcontroller swift2 uitabbarcontroller

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

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

在我的代码中我尝试了这个在视图中加载

self.tabBarItem.badgeValue = "3"

但徽章中没有任何内容

然后我尝试了:

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

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

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

enter image description here

3 个答案:

答案 0 :(得分:8)

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

  1. 团队导航控制器
  2. 团队视图控制器
  3. 因此团队视图导航控制器是控制标签栏项目的视图控制器。

    这样做可以解决您的问题

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

答案 1 :(得分:1)

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

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

并从您的TableController访问它:

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

答案 2 :(得分:0)

试试这个

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