在Swift 4中加载标签栏后设置标签栏项目标志

时间:2019-01-30 02:05:49

标签: swift uitabbarcontroller

目标是在单个选项卡栏项上设置徽章,但仅在调用应用程序其他位置的其他逻辑时才设置。现在,我有一类MainNavigationController扩展了UITabBarController,这是配置选项卡栏的地方。在MainNavigationController中,我还有一个公共功能,如下所示

func setBadge() {
    print("setting Badge")

    self.tabBar.items?[1].badgeValue = "1"

}

当我使用MainNavigationController()。setBadge()从应用程序的其他位置调用此函数时,将运行打印语句,但索引1处的tabBar项不会使用徽章进行更新。如何显示此徽章图标?

编辑 基于@Robert Dresler评论的解决方案。问题是我没有访问MainNavigationController的正确实例。

 let rootView = UIApplication.shared.keyWindow?.rootViewController as? BaseViewController
 let tabBarView = rootView?.centralViewController as? MainNavigationController
 tabBarView!.setBadge()

2 个答案:

答案 0 :(得分:1)

您要调用其方法的控制器与所显示的控制器不是同一实例,因此它没有连接任何控制器,因此没有选项卡栏项。您必须获取要显示的确切控制器的参考。

答案 1 :(得分:0)

尝试下面的代码

if let tabbar = self.tabBarController as? MainNavigationController {
        tabbar.setBadge()
}