从 UITabBarController 调用时无法获取常用函数中的选项卡项
Unable to get tab items in a common function when called from UITabBarController
我在 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
对于 UITabBarController
本身来说是 nil
。一种可能的解决方案如下所示:
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")
}
}
我在 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
对于 UITabBarController
本身来说是 nil
。一种可能的解决方案如下所示:
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")
}
}