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

问题描述 投票:0回答:1

我在UIViewController扩展中有一个共同的功能。我从标签栏控制器和视图控制器调用此功能。这从视图控制器调用时有效,但从标签栏控制器调用时不起作用。控制转到else错误: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")
        }
    }
}
ios swift uitabbarcontroller tabbar uitabbaritem
1个回答
1
投票

问题是self.tabBarControllernil本身的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")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.