2010-02-26 144 views
2

我试图找出编程方式,如果我的应用程序中的特定标签栏项目有徽章。iPhone:从uitabbaritem读取徽章值问题

当我在调试时,在视觉上,我可以清楚地看到它的确如此。但是,当我在有问题的viewController中运行此代码:

UITabBarItem* thisVCsTabBarItem = self.tabBarItem; 
NSString* badgeValue = thisVCsTabBarItem.badgeValue; 

... badgeValue为零。当我在调试器中检查这个VCsTabBarItem时,它的_badgeValue成员是零。

这是怎么回事?我是否应该尝试从标签栏项目中读取此值做不同的事情?

谢谢。

+1

这应该工作。你确定self.tabBarItem正在返回你认为它的对象吗? – Don 2010-02-26 23:25:58

+0

这是一个很好的问题。它有正确的标题,虽然图像没有设置...显然,它是设置,如果你看看屏幕上的标签栏。 因此,也许它是实例化一个新的标签栏项目,即使已经存在? (我知道一个已经存在了,因为我在代码中设置了它......这就是为什么我有它的徽章!) – 2010-02-27 00:00:24

回答

1

我做这样的事情了下载标签:

for (UITabBarItem* item in self.tabBarController.tabBar.items) { 
    if (item.tag == 3) { 
     if (downloadCount > 0) { 
      item.badgeValue = [NSString stringWithFormat: @"%d", downloadCount]; 
     } else { 
      item.badgeValue = nil; 
     } 
    } 
} 

我不认为你应该直接访问tabBarItem。最好在tabBarController的物品列表中找到您的物品。

+0

这里是文档所说的:“默认值是一个标签栏项目,显示视图控制器的标题,当你第一次访问这个属性时,UITabBarItem被创建,因此,如果你没有使用标签栏控制器,你不应该访问这个属性。但是因为我使用了一个标签栏控制器,这意味着对我来说访问它没有任何问题。你是否知道文档中的其他内容表明直接访问 - [UIViewController tabBarItem]是一个问题?谢谢。 – 2010-03-01 02:16:46

2

看一些代码,我使用UITabBarItembadgeValue财产,我看到self.tabBarItem.badgeValue回报nilself.navigationController.tabBarItem.badgeValue返回正确的值。这可能吗?

事情是自动完成实际上给了我tabBarItemself。因为这个容易犯错误。