获取数据后更新标签项徽章 (Swift)
Update Tab Item Badge after getting data (Swift)
我想在收到一些数据时更新自定义标签栏项目上的徽章。我能够在初始 viewDidLoad() 上更新徽章,但是当我稍后尝试使用数据再次调用 viewDidLoad 时,我的选项卡项为零。这是我的设置方式...
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,但在初始加载后我无法再更改选项卡项。
有人知道这是怎么回事吗?
我查看了这些类似的问题
Reload / Refresh tab bar items in a ViewController ?
Setting badge value in UITabBarItem in UIViewController
这将创建
let tabBar = CustomTabBar()
您需要一个新实例
guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }
我想在收到一些数据时更新自定义标签栏项目上的徽章。我能够在初始 viewDidLoad() 上更新徽章,但是当我稍后尝试使用数据再次调用 viewDidLoad 时,我的选项卡项为零。这是我的设置方式...
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,但在初始加载后我无法再更改选项卡项。
有人知道这是怎么回事吗?
我查看了这些类似的问题
Reload / Refresh tab bar items in a ViewController ?
Setting badge value in UITabBarItem in UIViewController
这将创建
let tabBar = CustomTabBar()
您需要一个新实例
guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }