[英]How to update badge count from all view controllers?
我在标签栏中显示了一堆徽章。 在我的应用中,徽章计数可以随时更改,因为它是实时聊天应用,用户可以通过Android,Web和iOS应用进行聊天。
现在,我正在viewWillAppear
获取应用程序中每个视图控制器中的徽章计数。 它可以工作,但是我不确定这是否是最好的方法?
有没有更好的方法来解决这个问题? 任何指针将不胜感激。 TX
您可以创建UITabBarController
子类(然后您必须将TabBarController的类设置为该子类)。 现在,在create方法和此方法内部,声明当当前selectedItem
是这个或tabBar
的items
数组中的这个 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.