我在UIViewController
扩展中有一个共同的功能。我从标签栏控制器和视图控制器调用此功能。这从视图控制器调用时有效,但从标签栏控制器调用时不起作用。控制转到else错误:tabItems。我无法弄清楚什么是错的,任何其他方式这样做,以便它从标签控制器调用时工作?
class MainTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.updateBadges()
}
extension UIViewController {
func updateBadges() {
DispatchQueue.main.async {
self.setBadge(tab: 1, count: 3)
}
}
func setBadge(tab: Int, count: Int) {
if let tabItems = self.tabBarController?.tabBar.items {
print("Inside tabItems")
let tabItem = tabItems[tab]
if count != 0 {
tabItem.badgeValue = String(count)
} else {
tabItem.badgeValue = nil
}
} else {
print("Error: tabItems")
}
}
}
问题是self.tabBarController
是nil
本身的UITabBarController
。一种可能的解决方案如下:
func setBadge(tab: Int, count: Int) {
let tabBarController = self as? UITabBarController ?? self.tabBarController
if let tabItems = tabBarController?.tabBar.items {
print("Inside tabItems")
let tabItem = tabItems[tab]
if count != 0 {
tabItem.badgeValue = String(count)
} else {
tabItem.badgeValue = nil
}
} else {
print("Error: tabItems")
}
}