UITabBarItem setFinishedSelectedImage: 在iOS7中已被弃用

18

setFinishedSelectedImage:withFinishedUnselectedImage:在iOS7中已经被弃用。苹果建议使用imageselectedImage的setter,配合UIImageRenderingModeAlwaysOriginal来代替。我找不到任何关于如何使用UIImageRenderingModeAlwaysOriginal的示例。因此问题很简单:如何在iOS7中设置UITabBarItem的图像?


看看2013 WWDC视频《Cocoa Touch有什么新内容》。我认为在那个视频中有解释。 - borrrden
3个回答

57

如果您想在UITabBar上显示实际图像,则使用以下代码。

[yourTabBarItem setImage:[[UIImage imageNamed:@"more.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

如果您希望以原始状态显示所选的图像,则使用以下内容

[yourTabBarItem setSelectedImage:[[UIImage imageNamed:@"more.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

这两个是替代品

setFinishedSelectedImage:  withFinishedUnselectedImage:

1
+1 这个方案完美地解决了问题。相比 IDE 推荐的 initWithTitle:image:selectedImage: 替代方案,这个解决方案值得更多关注。 - justinkoh

6

setFinishedSelectedImage已被弃用,因为苹果希望将界面引导至使用模板图像和所选的tintColor(或蓝色默认值)。因此,Tab Bar Items采用了默认设置。

如果您仍需要按设计使用图标图像,则需使用始终原始的渲染模式创建该图像。例如:

[[UIImage imageNamed:@"YourIcon.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];

要设置图标,您需要从ViewController中获取tabBarItem。在我的应用程序中缺少的是,每个选项卡都有一个NavigationController包装选项卡中顶部的视图控制器。大多数有关此主题的答案没有提及获取navigationContoller,这是使其在我的应用程序中运行的关键。
因此,在我的UITableViewContoller子类中,我添加了以下内容以加载viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];

...

[self.navigationController.tabBarItem setSelectedImage:[[UIImage imageNamed:@"MySelectedIcon.png"]
 imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]];

}

当选中选项卡时,您将得到设计好的图标。如果省略imageWithRenderingMode方法调用,则该图标将被视为模板并着色为tintColor颜色。希望这可以帮助您。


0
class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tabBar.backgroundImage = UIImage()
        self.tabBar.shadowImage = UIImage()
    }

}

请访问此URL,它将有助于提高您的内容质量。 - Willie Cheng

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