我在 UIViewController
扩展中有一个常用函数。我从标签栏 Controller 和 View Controller 调用这个函数。这在从 View Controller 调用时有效,但在从选项卡栏 Controller 调用时无效。控制转到 else Error: tabItems。我不知道出了什么问题,是否还有其他方法可以在从选项卡 Controller 调用时正常工作?
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")
}
}
关于ios - 从 UITabBarController 调用时无法获取常用函数中的选项卡项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860494/