覆盖 TabBar selectedIndex

Overriding TabBar selectedIndex

我有一个 viewController 继承自 UITabBarController .

我正在尝试覆盖 selectedIndex 变量,以便在 didSet 更改它时我可以收到通知,如下面的代码。

override var selectedIndex: Int {
    didSet {
        refreshTabBar()
    }
}

问题在于,当标签更改时,该功能未被调用,我需要知道为什么。

PS: 我不想从 didSelect 委托方法中调用它。

谢谢。

以编程方式设置 selectedIndex 以调用函数

class FirstViewController: TabViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.selectedIndex = 1
    }


}

class TabViewController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override var selectedIndex: Int{
        didSet {
            refreshTabBar()
        }
    }
}

正如苹果文档所说 selectedIndex:

This property nominally represents an index into the array of the viewControllers property.

所以它是从 viewControllers 中计算出 属性 which returns selectedViewController 的 firstIndex。 并在设置时更改 selectedViewController。

改用其他一些 UITabBarController 属性。 F.e:

override var selectedViewController: UIViewController? {
    didSet { 
        print(selectedIndex)
        refreshTabBar()
    }
}