我在标签栏中显示了一堆徽章。在我的应用中,徽章计数可以随时更改,因为它是实时聊天应用,用户可以从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
答案 0 :(得分:1)
您可以创建UITabBarController
的子类(然后您必须将TabBarController的类设置为此子类)。现在在create方法和此方法内部声明当当前selectedItem
是UITabBarItem
的 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"
}