首页 > 解决方案 > 获取数据后更新选项卡项徽章(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 每次都在自定义标签栏控制器中被调用,但是在初始加载之后,我不再有权更改标签项。

有谁知道发生了什么事?

我已经检查了这些类似的问题

在 ViewController 中重新加载/刷新标签栏项目?

在 UIViewController 的 UITabBarItem 中设置徽章值

标签: swiftuitabbaruitabbaritem

解决方案


这创造了

let tabBar = CustomTabBar()

一个新的实例,而不是你需要

guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }

推荐阅读