嘿伙计们,我有以下故事板
正如您所看到的,在故事板上有一个带有5个选项卡的标签栏应用程序,我为每个标签分配了徽标。现在,当用户单击特定视图中的单元格时,我想要更改其中一个选项卡的图像。我怎样才能做到这一点?我没有标签栏视图控制器或项目的实例,因为故事板几乎为我做了所有这些。所以我的问题是我需要采用哪些方法来改变图像?如果我需要标签栏控制器,我如何获取其实例以及我应该在哪个类中指向它?
非常感谢,
答案 0 :(得分:2)
在作为Tab Bar层次结构一部分的任何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
答案 1 :(得分:2)
每个UIViewController都有一个名为tabBarItem
的属性,它是一个UITabBarItem
,标签栏控制器用它来设置代表该控制器的图像。您可以通过操作来更改相关控制器的图像。
答案 2 :(得分:0)
我发现 - 至少在使用Swift的Xcode 6.1.1中 - 对tabBarItem的直接操作对我来说不起作用。
然而,@ borrrden的回答让我走上正轨。 Apple's documentation for UITabBarController非常明确地指出:
您永远不应该访问标签栏控制器的标签栏视图 直。要配置标签栏控制器的选项卡,请指定 视图控制器,为每个选项卡提供根视图 viewControllers属性。
...
标签栏项目通过其相应的视图进行配置 控制器。要将标签栏项目与视图控制器相关联,请创建 UITabBarItem类的新实例,适当地配置它 对于视图控制器,并将其分配给视图控制器 tabBarItem属性。
因此,根据这一点,以下是我提出的对我有用的内容。
它是用Swift编写的,我希望未来的读者可以根据需要进行相应的翻译(我还将图像名称更改为超级通用)。
我还使用了UIImage的imageWithRenderingMode方法,因此我可以使用自定义图像而不是iOS创建的阴影轮廓默认图像(我想赞美@ NSHeffalump的答案here。 ..)。
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++
}
}