Невозможно получить элементы вкладки в общей функции при вызове из UITabBarController - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть общая функция в расширении UIViewController.Я вызываю эту функцию из контроллера панели вкладок и просмотра контроллера.Это работает при вызове из контроллера представления, но не работает при вызове из контроллера панели вкладок.Управление переходит на иначе Ошибка: tabItems .Я не могу понять, что не так, любой другой способ сделать это так, чтобы он работал при вызове из контроллера вкладок?

class MainTabBarController: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.updateBadges()
}

extension UIViewController {

    func updateBadges() {
        DispatchQueue.main.async {
            self.setBadge(tab: 1, count: 3)
        }
    }

    func setBadge(tab: Int, count: Int) {
        if let tabItems = self.tabBarController?.tabBar.items {
            print("Inside tabItems")

            let tabItem = tabItems[tab]

            if count != 0 {
                tabItem.badgeValue = String(count)
            } else {
                tabItem.badgeValue = nil
            }
        } else {
            print("Error: tabItems")
        }
    }
}

1 Ответ

0 голосов
/ 20 декабря 2018

Проблема в том, что self.tabBarController - это nil для самого UITabBarController.Одним из возможных решений является что-то вроде следующего:

func setBadge(tab: Int, count: Int) {
    let tabBarController = self as? UITabBarController ?? self.tabBarController

    if let tabItems = tabBarController?.tabBar.items {
        print("Inside tabItems")

        let tabItem = tabItems[tab]

        if count != 0 {
            tabItem.badgeValue = String(count)
        } else {
            tabItem.badgeValue = nil
        }
    } else {
        print("Error: tabItems")
    }
}
...