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

如何在iOS中动态更改UITabBar图像,ios,objective-c,cocoa-touch,uitabbarcontroller,uitabbar,Ios,Objective C,Cocoa Touch,Uitabbarcontroller,Uitabbar,在运行时的某个时刻,我想更改我的uitabar中某个选项卡的图像。以下是我迄今为止所尝试的: [[self.tabBarController.tabBar.items objectAtIndex:1] setImage:[UIImage imageNamed:@"image-name"] forState:UIControlStateNormal]; 上面给出了一个-[uitabaritem setImage:forState:]:发送到实例的无法识别的选择器 如果我使用set

在运行时的某个时刻,我想更改我的
uitabar
中某个选项卡的图像。以下是我迄今为止所尝试的:

[[self.tabBarController.tabBar.items objectAtIndex:1]
    setImage:[UIImage imageNamed:@"image-name"]
    forState:UIControlStateNormal];
上面给出了一个
-[uitabaritem setImage:forState:]:发送到实例的无法识别的选择器

如果我使用
setImage
方法而不使用
forState
,它可以工作,但iOS 3中不推荐使用此方法

我试过你的答案,但是现在在我更改的
uitabar的
上面有一条奇怪的蓝线。知道为什么吗


使用
图像
选择图像
属性:

UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:1];
item.image = [UIImage imageNamed:@"image"];
item.selectedImage = [UIImage imageNamed:@"selected_image"];
还要注意:

默认情况下,将根据自动创建实际选定的图像 源图像中的alpha值。为了防止系统着色, 使用UIImageRenderingModeAlways或Original提供图像


uitabaritem
扩展了具有
image
属性的
UIBarItem

做:

尽管如下所示更易于阅读和调试:

UITabBarItem *item = self.tabBarController.tabBar.items[1];
item.image = [UIImage imageNamed:@"image-name"];

虽然这个问题很老,@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"];

如果您想在运行时更改它,就像在选择某些内容时一样,请将此代码放在
viewdilayoutsubviews
method

选项卡栏上方的蓝线解释了吗?请看我刚才添加的图片。@thisiscrazy4我想是的,尝试对所选图像使用
UIImageRenderingModeAlways或原始
选项。同样的,但现在它是一条灰线。@thisiscrazy4您的UITabBar图像似乎顶部有透明部分。可能是因为这个原因吗?事实上,在进一步研究之后,我意识到图像甚至没有被设置为新图像。该项的属性几乎都为零,这意味着我认为我没有访问正确的UITabBarItem。
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"];