Переопределение TabBar selectedIndex - PullRequest
0 голосов
/ 31 марта 2020

У меня есть viewController, который наследуется от UITabBarController .

Я пытаюсь переопределить переменную selectedIndex, чтобы я мог получать уведомления при ее изменении с помощью didSet, как показано в коде ниже.

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

Проблема в том, что эта функция не вызывается при изменении вкладок, и мне нужно знать, почему.

PS: я не хочу вызывать ее из Метод делегата didSelect.

Спасибо.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Как в документации Apple говорится о selectedIndex:

Это свойство номинально представляет индекс в массиве свойства viewControllers.

Так что это вычисляемое свойство, которое возвращает firstIndex выбранного ViewController из viewControllers. И при установке он изменяет selectedViewController.

Вместо этого используйте другое свойство UITabBarController. Fe:

override var selectedViewController: UIViewController? {
    didSet { 
        print(selectedIndex)
        refreshTabBar()
    }
}
0 голосов
/ 31 марта 2020

Установить 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()
        }
    }
}
...