簡體   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