swift - 获取数据后更新选项卡项徽章(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 每次都在自定义标签栏控制器中被调用,但是在初始加载之后,我不再有权更改标签项。
有谁知道发生了什么事?
我已经检查了这些类似的问题
解决方案
这创造了
let tabBar = CustomTabBar()
一个新的实例,而不是你需要
guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }
推荐阅读
- css - 防止角材质 css 样式传播到其他组件
- generics - Dart 2.7 通用扩展
- javascript - 如何在鼠标悬停时为页面上的所有 div 添加悬停效果?
- mysql - 如何每天将数据从 Cloud SQL 导出到 BigQuery?
- rest - 当正文数据与数据库中的当前状态相同时,使用哪个 REST HTTP 状态码?
- python - 视觉工作室代码远程ssh无法调试python
- arduino - PN532 V3 + Arduino UNO + libnfc 错误(错误:无法打开 NFC 设备:pn532_uart:/dev/ttyUSB0:115200)
- ruby-on-rails - Rails webpacker 无法从 nvm 找到节点版本
- substrate - 如何使用 RPC 调用从 Substrate 读取哈希值并获取相应的 AccountId?
- javascript - JS 问题然后创建一个计算器并能够输入多个数字