从UITabBarController调用时,无法在通用函数中获取选项卡项目

时间:2018-12-19 23:17:42

标签: ios swift uitabbarcontroller tabbar uitabbaritem

我在UIViewController扩展名中有一个常用功能。我从标签栏控制器和视图控制器调用此函数。从视图控制器调用时有效,但从标签栏控制器调用时无效。控制转到其他错误:tabItems 。我无法弄清楚出了什么问题,还有其他方法可以使它在从Tab控制器调用时起作用吗?

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 :(得分:1)

问题是self.tabBarController本身的nilUITabBarController。一种可能的解决方案如下所示:

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")
    }
}