我正在开发购物车标签。最初我只是使用默认徽章值来显示底部标签栏中购物车中的项目数。现在设计师想要看上去,他想根据购物车中的物品数量显示不同的图像。例如,如果有,请显示cartTab-1.png,如果为2,则显示cartTab-2.png ...
我试图更改tabaritem(UITabBarItem
)的图像,但它对我不起作用。这可行吗?我与我的同事讨论过,他说我可能要自己在tabbarItem上绘制图像。你有什么建议吗?谢谢
更多详情:
有谁知道为什么[self.tabBarItem setImage:[UIImage imageNamed:@"cartxxx.png"]]
不起作用?当我调试时,属性确实发生了变化,但UI保持不变
更新
以下代码有效。感谢大家!
UIImage* cartTabImage = [UIImage imageNamed:cartTabImageName];
[[self.tabBarController.tabBar.items objectAtIndex:3] setImage:cartTabImage];
答案 0 :(得分:8)
适用于2个标签的Swift 3.0版本,
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)
答案 1 :(得分:6)
UITabBarItem *tabBarItem0 = [self.tabBarController.tabBar.items objectAtIndex:0];
[tabBarItem0 setImage:[[UIImage imageNamed:@"iconGray.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem0 setSelectedImage:[[UIImage imageNamed:@"iconBlue.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
答案 2 :(得分:3)
我找到的最简单的方法是
self.tabBarItem.image=[UIImage imageNamed:@"myImage.png"];
答案 3 :(得分:2)
试试这个:
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];
答案 4 :(得分:1)
此答案可能会帮助您
UITabBarItem *i5=[[UITabBarItem alloc]initWithTitle:@"Profile" image:[UIImage imageNamed:@"profile.png"] tag:5];
答案 5 :(得分:1)
- (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage
当用户选择了选项卡时,会显示selectedImage。当用户选择了不同的选项卡时,将显示unselectedImage。
在viewDidLoad:
做
UIImage *c1 = [UIImage imageNamed:@"cart1.png"];
UIImage *c2 = [UIImage imageNamed:@"cart1unselected.png"];
[[self tabBarItem] setFinishedSelectedImage:c1 withFinishedUnselectedImage:c2];
答案 6 :(得分:0)
正如更新后的问题及其他答案中所述,在大多数情况下,UITabBarItem
需要直接通过UITabBarController
进行访问。
似乎iOS创建了UITabBarItem
实例的副本,这解释了为什么更新self.tabBarItem
属性并不反映用户界面中的更改:
我的猜测是,当Tab Bar项目是以编程方式而不是故事板创建的时候会发生这种情况,但这只是猜测。
然后,正如所指出的那样,解决方案是通过Tab Bar控制器访问Tab Bar项目数组。这个解决方案很糟糕,因为它取决于标签栏项目索引的知识:
UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
[tabBarItem setImage:image];
[tabBarItem setSelectedImage:image];
不要忘记更新默认和选定状态的图像。
答案 7 :(得分:0)
let favorites = UITabBarItem(title: nil, image:UIImage(named: "Screen Shot 2018-12-13 at 11.00.42 AM") , tag: 0)