Ios 如何以编程方式更改tabbarItem';s形象
我正在开发一个购物车标签。最初,我只是使用默认的badge值在底部选项卡栏上显示购物车中有多少物品。现在,设计师想变得花哨,他想根据购物车中的物品数量展示不同的图像。例如,如果有,则显示cartTab-1.png,如果有,则显示cartTab-2.png 我试图更改tabaritem(Ios 如何以编程方式更改tabbarItem';s形象,ios,uitabbar,Ios,Uitabbar,我正在开发一个购物车标签。最初,我只是使用默认的badge值在底部选项卡栏上显示购物车中有多少物品。现在,设计师想变得花哨,他想根据购物车中的物品数量展示不同的图像。例如,如果有,则显示cartTab-1.png,如果有,则显示cartTab-2.png 我试图更改tabaritem(uitabaritem)的图像,但对我无效。可行吗?我和我的同事讨论过,他说我可能需要自己在tabbarItem上画这个图像。你有什么建议吗?谢谢 更多详情: 我使用InterfaceBuilder创建了tabIt
uitabaritem
)的图像,但对我无效。可行吗?我和我的同事讨论过,他说我可能需要自己在tabbarItem上画这个图像。你有什么建议吗?谢谢
更多详情:
[self.tabBarItem setImage:[UIImage imagename:@“cartxxx.png”]
不起作用吗?调试时,属性确实发生了更改,但UI保持不变
更新
下面的代码可以工作。谢谢大家
UIImage* cartTabImage = [UIImage imageNamed:cartTabImageName];
[[self.tabBarController.tabBar.items objectAtIndex:3] setImage:cartTabImage];
这个答案可能对你有帮助
UITabBarItem *i5=[[UITabBarItem alloc]initWithTitle:@"Profile" image:[UIImage imageNamed:@"profile.png"] tag:5];
试试这个:
int numItems = 0; // count of items in your shopping cart
NSString *imageName = [NSString stringWithFormat:@"cartTab-%d",numItems];
// change your image
[[self.tabBar.items objectAtIndex:myIndex] setImage:[UIImage imageNamed:imageName]];
// or, if you want to set it when initializing the tabBar
UITabBarItem *item = [[[UITabBarItem alloc] initWithTitle:myTitle image:[UIImage imageNamed:imageName] tag:someTag];
当用户选择选项卡时,将显示selectedImage。当用户选择了其他选项卡时,将显示unselectedImage
在视图中加载:
do
UIImage *c1 = [UIImage imageNamed:@"cart1.png"];
UIImage *c2 = [UIImage imageNamed:@"cart1unselected.png"];
[[self tabBarItem] setFinishedSelectedImage:c1 withFinishedUnselectedImage:c2];
我找到的最简单的方法是
self.tabBarItem.image=[UIImage imageNamed:@"myImage.png"];
Swift 3.0版本,用于2个选项卡
self.tabBar.items?[0].image = UIImage(named: "inactive_image_0")?.withRenderingMode(.alwaysOriginal)
self.tabBar.items?[0].selectedImage = UIImage(named: "active_image_0")?.withRenderingMode(.alwaysOriginal)
self.tabBar.items?[1].image = UIImage(named: "inactive_image_1")?.withRenderingMode(.alwaysOriginal)
self.tabBar.items?[1].selectedImage = UIImage(named: "active_image_1")?.withRenderingMode(.alwaysOriginal)
如更新的问题和其他答案所述,在大多数情况下,需要通过
UITabBarController
直接访问UITabBarItem
iOS似乎创建了uitabaritem
实例的副本,这解释了为什么更新self.tabBarItem
属性不能反映用户界面中的更改:
我的猜测是,当选项卡栏项是以编程方式创建的,而不是由情节提要创建时,会发生这种情况,但这只是一个猜测
如前所述,解决方案是通过选项卡栏控制器访问选项卡栏项目数组。此解决方案不好,因为它依赖于选项卡栏项目索引的知识:
UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
[tabBarItem setImage:image];
[tabBarItem setSelectedImage:image];
不要忘记更新默认状态和选定状态的图像。谢谢。事实上,我也做了同样的事情,但是图像没有改变。调试时,tabBarItem的属性将更改为新图像。但由于某些原因,UI没有更新。以下各项均无效:[self.tabBarItem setImage:[UIImage ImageName:@“play.png”];[self.tabBarItem setBadgeValue:@“4”];[self.tabBarItem setTitle:@“测试”];顺便说一句,我是在viewDidLoad中完成的。谢谢,因为我需要支持ios 4,我调用了类似的代码,但它不起作用。[self.tabBarItem setImage:[UIImage ImageName:@“cartxxx.png”];我也不把它称为在视图中。在我的例子中,它是一个KVO,如果购物车计数发生变化,它会通知该方法更新映像。这是一个iOS5方法。如果您需要支持iOS4,那么您必须将uitabar子类化并创建自定义图像代码。。。它很烦人,而且非常长,可能会有很多车。有一些教程介绍如何将自定义映像添加到UITabBarthanks。在我的例子中,它是KVO,如果购物车计数发生变化,它会通知方法更新映像。不在初始化步骤
self中。tabBarItem
不一定非空。这不是设置selectedImage,对我来说无法正常工作。withRenderingMode(.alwaysOriginal)确实对我有帮助。
let favorites = UITabBarItem(title: nil, image:UIImage(named: "Screen Shot 2018-12-13 at 11.00.42 AM") , tag: 0)
UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
[tabBarItem setImage:image];
[tabBarItem setSelectedImage:image];
let favorites = UITabBarItem(title: nil, image:UIImage(named: "Screen Shot 2018-12-13 at 11.00.42 AM") , tag: 0)