iPhone:无法从 uitabbaritem 读取徽章值

Posted

技术标签:

【中文标题】iPhone:无法从 uitabbaritem 读取徽章值【英文标题】:iPhone: Trouble reading badge value from uitabbaritem 【发布时间】:2010-02-26 23:09:48 【问题描述】:

我正在尝试以编程方式确定我的应用中的特定标签栏项目是否有徽章。

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

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

...badgeValue 为零。当我在调试器中检查 thisVCsTabBarItem 时,它的 _badgeValue 成员为 nil。

这里发生了什么?在尝试从标签栏项目中读取此值时,我是否应该做一些不同的事情?

谢谢。

【问题讨论】:

这应该可以。您确定 self.tabBarItem 正在返回您认为的对象吗? 这是个好问题。它有正确的标题,虽然图像没有设置......而且很明显,如果你查看屏幕上的标签栏,它已经设置好了。所以也许它正在实例化一个新的标签栏项目,即使一个已经存在? (我知道一个已经存在,因为我在代码的前面设置了它......这就是为什么我有它的徽章!) 【参考方案1】:

查看我使用UITabBarItembadgeValue 属性的一些代码,我看到self.tabBarItem.badgeValue 返回nilself.navigationController.tabBarItem.badgeValue 返回正确的值。会这样吗?

问题是自动完成实际上在self 之后给了我tabBarItem。因此很容易出错。

【讨论】:

【参考方案2】:

我为“下载”选项卡做了这样的事情:

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 的 items 数组中找到您的项目。

【讨论】:

这是文档所说的:“默认值是显示视图控制器标题的选项卡栏项目。第一次访问此属性时,会创建 UITabBarItem。因此,您不应该访问如果您不使用标签栏控制器,则此属性。”但是由于我使用的是标签栏控制器,这意味着我访问它没有问题。您是否知道文档中的其他内容表明直接访问 -[UIViewController tabBarItem] 是一个问题?谢谢。

以上是关于iPhone:无法从 uitabbaritem 读取徽章值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone 中增加 UITabBarItem 的大小?

自定义UITabBarItem的图标位置和标题(iphone sdk)

iPhone XR iOS 12 UITabBarItem 标题重叠在图片上方

iOS 3 - 发生内存警告后,UITabBarItems 从 UITabBar 消失

如何从 UITests 中访问 UITabBarItem?

UITabBarItem 图标动画