获取数据后更新标签项徽章 (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 }