如何在iOS中动态更改UITabBar图像

4

在运行时,我想要更改UITabBar中一个选项卡的图片。以下是我目前尝试过的方法:

[[self.tabBarController.tabBar.items objectAtIndex:1]
    setImage:[UIImage imageNamed:@"image-name"]
    forState:UIControlStateNormal];

上述错误提示我收到了一个未识别的选择器-[UITabBarItem setImage:forState:] 如果我在不使用forState的情况下使用setImage方法,它可以工作,但是这个方法已经在iOS 3中被弃用。
我尝试了您的答案,但现在在我更改的UITabBarUIIMage上方出现了这条奇怪的蓝色线。有什么想法吗? enter image description here
3个回答

6
使用imageselectedImage属性:
UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:1];
item.image = [UIImage imageNamed:@"image"];
item.selectedImage = [UIImage imageNamed:@"selected_image"];

同时还要注意 这个

默认情况下,实际选择的图像是从源图像中的alpha值自动创建的。为了防止系统着色,请提供带有UIImageRenderingModeAlwaysOriginal的图像。


能解释一下选项卡栏上方的蓝色线条吗?请看我刚添加的图片。 - thisiscrazy4
1
@thisiscrazy4 我认为是的,尝试使用 UIImageRenderingModeAlwaysOriginal 选项来设置 selected image - Vlad Papko
同一件事,但现在是一条灰线。 - thisiscrazy4
@thisiscrazy4 看起来你的 UITabBar 图像顶部有透明部分,可能是原因? - Vlad Papko
实际上,经过进一步的研究,我意识到图像甚至没有被设置为新图像。项目的属性几乎全部为空,这意味着我认为我没有访问正确的UITabBarItem。 - thisiscrazy4

1
尽管这个问题很老,@visput的答案绝对有效,但对于像我这样完全的新手来说,您的UITabBarController实现中,如果在加载UITabBarController时想要,将其放在viewDidLoad方法中。
UITabBarItem *item = [self.tabBar.items objectAtIndex:ITEM_INDEX];// item index is the tab index which starts from 0
item.image = [UIImage imageNamed:@"image"];
item.selectedImage = [UIImage imageNamed:@"image"];

如果你想在运行时更改它,比如在选择某个东西时,请将此代码放入viewDidLayoutSubviews方法中。

1

UITabBarItem 继承自 UIBarItem,后者具有一个名为 image 的属性。

请执行以下操作:

[[self.tabBarController.tabBar.items objectAtIndex:1] setImage:[UIImage imageNamed:@"image-name"]];

尽管以下方式更易于阅读和调试:
UITabBarItem *item = self.tabBarController.tabBar.items[1];
item.image = [UIImage imageNamed:@"image-name"];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接