3

我有以下故事板:

在此处输入图像描述

如您所见,有一个带有 5 个选项卡的选项卡栏应用程序,在情节提要上,我为每个选项卡分配了徽标。现在,当用户单击特定视图中的单元格时,我想更改其中一个选项卡的图像。我怎样才能做到这一点?我没有标签栏视图控制器或项目的实例,因为情节提要几乎为我完成了所有这些工作。所以我的问题是我必须实施哪些方法来更改图像?如果我需要标签栏控制器,我该如何获取它的实例以及我应该将它指向哪个类?

非常感谢你,

4

3 回答 3

2

在任何UIViewController属于选项卡栏层次结构的类中,您需要做的就是获得选项卡栏控制器的实例:

//In UIViewController
UITabBarController *tabBarController = self.tabBarController;

然后您可以像这样更改图像

//Suppose you want to change the 1st (0th) tab bar image
UITabBarItem * tabItem = [tabBarController.tabBar.items objectAtIndex: 0];
tabItem.image = //whatever image you want to change to
于 2012-07-26T01:21:06.647 回答
2

每个 UIViewController 都有一个名为的属性tabBarItem,它是UITabBarItem标签栏控制器用来设置表示该控制器的图像的属性。您可以对其进行操作以更改相关控制器的图像。

于 2012-07-26T02:20:28.013 回答
0

我发现——至少在使用 Swift 的 Xcode 6.1.1 中——对 tabBarItem 的直接操作对我不起作用。

但是,@borrrden 的回答让我走上了正轨。Apple 的 UITabBarController 文档非常清楚地说明:

你不应该直接访问标签栏控制器的标签栏视图。要配置选项卡栏控制器的选项卡,请将为每个选项卡提供根视图的视图控制器分配给 viewControllers 属性。

...

选项卡栏项通过其相应的视图控制器进行配置。要将标签栏项与视图控制器相关联,请创建 UITabBarItem 类的新实例,为视图控制器适当配置它,并将其分配给视图控制器的 tabBarItem 属性。

因此,据此,以下是我想出的对我有用的东西。

它是用 Swift 编写的,我希望未来的读者可以根据需要对其进行相应的翻译(我还将图像名称更改为超级通用)。

我还使用了 UIImage 的 imageWithRenderingMode 方法,因此我可以使用自定义图像而不是 iOS 创建的阴影剪影默认图像(我想在此感谢@NSHeffalump 的回答......)。

    if let viewControllers = tabBarController.viewControllers as? Array<UIViewController> {
        var tabBarItemImageNames = ["TabBarItemImage0","TabBarItemImage1","TabBarItemImage2","TabBarItemImage3","TabBarItemImage4"]
        var vcIndex = 0
        for vc:UIViewController in viewControllers {
            let selectedImage = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            let image = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            var tabBarItem = UITabBarItem(title: "", image: image, selectedImage: selectedImage)
            vc.tabBarItem = tabBarItem
            vcIndex++
        }
    }
于 2015-01-29T16:58:47.910 回答