当我收到一些数据时,我想更新自定义标签栏项目上的徽章。我可以更新初始viewDidLoad()上的标志,但是当我稍后尝试再次使用数据再次调用viewDidLoad时,我的选项卡项为nil。这是我设置的方式...
class CustomTabBar: UITabBarController {
var count = 0
override func viewDidLoad() {
super.viewDidLoad()
print("this prints correctly every time I call reload with the updated count: " + count)
if let tabItems = self.tabBar.items {
let tabItem = tabItems[0]
tabItem.badgeValue = String(count)
}else{
print("tab items nil")
}
}
func reload(count: Int){
self.count = count
viewDidLoad()
}
}
我在获取所需数据后从另一个视图控制器调用reload()。
func updateBadge(){
let tabBar = CustomTabBar()
let username = UserUtil.username
let db = Firestore.firestore()
let upcomingContestsRef = db
.collection("NBAContests")
.whereField("EnteredUsers", arrayContains: username)
.whereField("Stage", isEqualTo: 2)
upcomingContestsRef.getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
print("count is " + String(querySnapshot!.count))
tabBar.reload(count: querySnapshot!.count)
}
}
}
我已经检查过每次在自定义标签栏控制器中是否都调用了viewDidLoad,但是在初始加载之后,我将无权更改标签项。
有人知道发生了什么吗?
我已经检查了类似的问题
此创建
let tabBar = CustomTabBar()
您需要一个新实例
guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }