如何从所有视图控制器更新徽章计数?

时间:2018-12-19 18:21:12

标签: ios swift uiviewcontroller

我在标签栏中显示了一堆徽章。在我的应用中,徽章计数可以随时更改,因为它是实时聊天应用,用户可以从Android,Web和iOS应用进行聊天。

现在,我正在 id score date_1 date_2 date_3 date_4 date_5 date 2014-01-01 A 75 0 0 0 0 0 2014-01-01 B 1 0 0 0 0 0 2014-01-01 C 2 0 0 0 0 0 2014-01-02 A 84 75 0 0 0 0 2014-01-02 B 1 1 0 0 0 0 2014-01-02 C 3 2 0 0 0 0 2014-01-03 A 1 84 75 0 0 0 2014-01-03 B 1 1 1 0 0 0 2014-01-03 C 1 3 2 0 0 0 的应用中获取每个View Controller中的徽章计数。它可以工作,但是我不确定这是否是最好的方法?

有没有更好的方法来解决这个问题?任何指针将不胜感激。 Tx

2 个答案:

答案 0 :(得分:1)

您可以创建UITabBarController的子类(然后您必须将TabBarController的类设置为此子类)。现在在create方法和此方法内部声明当当前selectedItemUITabBarItem this this tabBar时应该发生的情况items数组

func changeBadge() {
    guard let item = tabBar.selectedItem else { return }
    guard let items = tabBar.items else { return }
    switch item {
    case items[0]:
        ... // get value
        item.badgeValue = "\(value)"
    case items[1]
        ... // get value
        item.badgeValue = "\(value)"
    ...
    default:
    }
}

现在只需在加载TabBarController并在用户选择新的UITabBarItem时调用此方法

override func viewDidLoad() {
    changeBadge()
}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    changeBadge()
}

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        changeBadge()
    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        changeBadge()
    }

    func changeBadge() {
        guard let item = tabBar.selectedItem else { return }
        guard let items = tabBar.items else { return }
        switch item {
        case items[0]:
            ... // get value
            item.badgeValue = "\(value)"
        case items[1]
            ... // get value
            item.badgeValue = "\(value)"
        ...
        default:
        }
    }

}

答案 1 :(得分:0)

由于您可以访问 tabBarController 的共享实例,因此可以在任何 UIViewController 中轻松增加其tabBar项的徽章值。您可以按照以下步骤进行操作:

if let tabBarItems = tabBarController?.tabBar.items {
     let tabItem = tabBarItems[0]
     tabItem.badgeValue = "1"
}