我在UIViewController
扩展名中有一个常用功能。我从标签栏控制器和视图控制器调用此函数。从视图控制器调用时有效,但从标签栏控制器调用时无效。控制转到其他错误:tabItems 。我无法弄清楚出了什么问题,还有其他方法可以使它在从Tab控制器调用时起作用吗?
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")
}
}
}
答案 0 :(得分:1)
问题是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")
}
}