首页 > 解决方案 > 覆盖自定义 TabBar 的属性?

问题描述

我有一个自定义标签栏类。如下所示。在 main.storyboard 中,我将标签栏的类设置为 CustomTabBar:

class CustomTabBar: UITabBar {   
    override var items: [UITabBarItem]? //[This line returns an error]
    // items?[0].selectedImage = UIImage(named: "MyImage.png")
    override func sizeThatFits(_ size: CGSize) -> CGSize {
        var size = super.sizeThatFits(size)
        size.height = 49.0
        return size
    }
}

“覆盖 var 项”行返回错误“不能用存储的属性 'items' 覆盖”。我想访问这个属性,以便我可以更改与第一个标签栏项目相关联的内容。我希望能够使用当前在该行下方注释掉的行。我怎么会收到这个错误?另外,还有其他方法可以完成我想做的事情吗?

标签: swiftuitabbarcontrollerxcode8uitabbaruitabbaritem

解决方案


不能用存储的属性“项目”覆盖。

我不确定你为什么要这样做。如果您想设置项目,您可以使用方法setItems(_:animated:),并且当您需要获取选定项目时,您可以使用名为selectedItem.

您还可以执行其他操作,例如:

  • 追加新项目items?.append()
  • 更改具有特定索引的项目的属性items?[0].selectedImage = UIImage(named: "MyImage.png")

因此,对于您的情况,您可以viewDidLoad在自定义 TabBarController中更改此项目属性

override func viewDidLoad() {
    super.viewDidLoad()
    tabBar.items?[0].selectedImage = UIImage(named: "MyImage.png")
}

推荐阅读