在运行时设置标签栏图像

Posted

技术标签:

【中文标题】在运行时设置标签栏图像【英文标题】:Set Tab Bar image at runtime 【发布时间】:2019-08-30 11:47:00 【问题描述】:

我希望在运行时将标签栏项目的图像更改为新图像,以更新不同的视图。

有什么办法可以做到吗?

我已经挣扎了几个小时,所以任何帮助都将不胜感激。

Swift 4.2 Xcode 10.1

编辑:

我尝试在我的 VC 中通过 viewDidLoad 中的 self.tabBarController?.tabBar.items?[0].image 进行设置。我已经尝试对 TabBarController 进行子类化并通过那里进行设置,但我无法获得我所追求的运行时行为。

更清楚地说,我对当前选中和未选中的名为“globe”的图像感到满意,但我想听一个名为“truth”的变量,当真相为真时,我想更改未选中的图像到“globe_red”。

在应用程序运行时更改图像的行为让我很苦恼!

【问题讨论】:

到目前为止你有什么尝试? 非常抱歉,我记不清了。我尝试通过视图控制器本身设置它,通过 TabBarController 都无济于事。现在将编辑我的帖子。 【参考方案1】:

您可以使用以下代码更改tabBar的图像。

self.tabBarController?.tabBar.items?[0].image = #imageLiteral(resourceName: "img")

selectedImage

self.tabBarController?.tabBar.items?[0].selectedImage = #imageLiteral(resourceName: "img")

代替items 中的0,您可以将索引用于选定的tabBar。

【讨论】:

我在 VC 的 viewDidLoad 中尝试了 self.tabBarController?.tabBar.items?[0].image = UIImage(named: "globe_red"),但没有成功。 确保视图控制器嵌入了tabBar。 是的,我的视图控制器嵌入了一个标签栏控制器。 我可以从打印实例中看到上述方法确实改变了图像,但它并没有显示在应用程序上。有什么想法吗? 确保资产中的图像选择为原始图像以进行渲染。【参考方案2】:

好的,我修好了!

子类 UITabBarController

在您的子类的 viewDidLoad 中,将 self.tabBar.items?[0].image 和 self.tabBar.items?[0].selectedImage 设置为您想要的图像。这里我设置了第一个 VC 的标签栏项目,但是你可以设置任何索引或循环并设置所有。

【讨论】:

以上是关于在运行时设置标签栏图像的主要内容,如果未能解决你的问题,请参考以下文章

发送到后台后,导航和标签栏变暗的应用

应用程序首次运行时加载所有标签栏视图

如何在运行时在 TabBarcontroller 中排列标签栏项目?

导航栏 rightbaritem 图像按钮错误 iOS 11

在 iOS 6 下运行时如何从 TabBar 中删除白角

在运行作为 JAR 存档分发的项目时加载图像等资源