繁体   English   中英

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

[英]How to update badge count from all view controllers?

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

现在,我正在viewWillAppear获取应用程序中每个视图控制器中的徽章计数。 它可以工作,但是我不确定这是否是最好的方法?

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

您可以创建UITabBarController子类(然后您必须将TabBarController的类设置为该子类)。 现在,在create方法和此方法内部,声明当当前selectedItem这个tabBaritems数组中的这个 UITabBarItem时应该怎么tabBar

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:
        }
    }

}

当你有tabBarController的共享实例的访问,你可以轻松地增加任何的UIViewController它的TabBar项目的徽章价值。 您可以按照以下步骤进行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM