我正在开发购物车标签 . 最初我只是使用默认徽章值来显示底部标签栏中购物车中的项目数 . 现在设计师想要看上去,他想根据购物车中的物品数量显示不同的图像 . 例如,如果有,请显示cartTab-1.png,如果为2,则显示cartTab-2.png ...
我试图改变tabaritem( UITabBarItem
)'s image but it didn'为我工作 . 这可行吗?我与我的同事讨论过,他说我可能要自己在tabbarItem上绘制图像 . 你有什么建议吗?谢谢
更多细节:
-
我使用InterfaceBuilder创建了tabItem,并在那里设置了图像和 Headers
-
我需要支持ios4 . 所以我不能使用setSelectedImage ...
-
在我的情况下,它是一个KVO,如果购物车数量发生变化,它会通知方法更新图像 . 不在初始化步骤中 .
有谁知道为什么 [self.tabBarItem setImage:[UIImage imageNamed:@"cartxxx.png"]]
不起作用?当我调试时,属性确实发生了变化,但UI保持不变
Update
以下代码有效 . 感谢大家!
UIImage* cartTabImage = [UIImage imageNamed:cartTabImageName];
[[self.tabBarController.tabBar.items objectAtIndex:3] setImage:cartTabImage];
7 回答
当用户选择了选项卡时,将显示selectedImage . 当用户选择了不同的选项卡时,将显示unselectedImage .
在你的
viewDidLoad:
做适用于2个标签的Swift 3.0版本,
我找到的最简单的方法是
试试这个:
这个答案可能会帮助你
如更新的问题和其他答案所述,在大多数情况下,需要直接通过
UITabBarController
访问UITabBarItem
.似乎iOS创建了
UITabBarItem
实例的副本,这解释了为什么更新self.tabBarItem
属性不会反映用户界面中的更改:我的猜测是,当Tab Bar项目是以编程方式而不是故事板创建的时候会发生这种情况,但这只是猜测 .
然后,正如所指出的那样,解决方案是通过Tab Bar控制器访问Tab Bar项目数组 . 这个解决方案很糟糕,因为它取决于标签栏项目索引的知识:
不要忘记更新默认和选定状态的图像 .