获取数据后更新选项卡项(快速)

问题描述 投票:0回答:1

当我收到一些数据时,我想更新自定义标签栏项目上的徽章。我可以更新初始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,但是在初始加载之后,我将无权更改标签项。

有人知道发生了什么吗?

我已经检查了类似的问题

Reload / Refresh tab bar items in a ViewController ?

Setting badge value in UITabBarItem in UIViewController

swift uitabbar uitabbaritem
1个回答
0
投票

此创建

let tabBar = CustomTabBar()

您需要一个新实例

guard let tabBar = self.tabBarController as? CustomTabBar else { print("returned") ; return }
© www.soinside.com 2019 - 2024. All rights reserved.