如何在选中时删除覆盖UITabBarItem的蓝色方块?

时间:2014-08-10 00:37:48

标签: ios objective-c uitabbarcontroller uitabbaritem

我有一个iPad应用程序(Xcode 5,iOS 7,ARC和Storyboards)。我有一个UITabBarController,每个场景都有UITabBarItem

当我点击标签栏项目时,它会转到正确的场景,但是"当前"标签栏项目图像由"蓝框"覆盖。

如何更换"蓝盒"有不同的形象? (我不想改变颜色;我想用不同的图像替换它。)

3 个答案:

答案 0 :(得分:3)

用于标签栏项目的图片必须为renderingModeUIImageRenderingModeAlwaysOriginal,否则它们将显示为蓝色方块(模板)。名为“Tab Bars”的文件说,

  

标签栏项目图标

     

标签栏中的每个项目都可以具有自定义选定图像并且未选中   图片。初始化选项卡栏项时,可以指定这些图像   使用initWithTitle:image:selectedImage:方法。请注意一个标签   条形图像将自动呈现为模板图像   在标签栏中,除非您明确将其渲染模式设置为   UIImageRenderingModeAlwaysOriginal。有关更多信息,请参阅模板   图像。

我认为你不能在故事板中设置它们,所以你应该在控制器的init方法中进行设置,

-(id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        UIImage *img = [UIImage imageNamed:@"pic.jpg"];
        img  = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        [self.tabBarItem setSelectedImage:img];
    }
    return self;
}

答案 1 :(得分:0)

这是一个Xcode错误,将在8.2版本中修复。这是关于此问题的Apple官方说明。查看Interface Builder的链接>已解决的问题> UITabBarController https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html

答案 2 :(得分:0)

rdelmar's code的3+版本:

class CustomTabBarController: UITabBarController {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        let img = UIImage(imageLiteralResourceName: "pic").withRenderingMode(.alwaysOriginal)
        tabBarItem.selectedImage = img
    }
}