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

Set a Tab Bar Item Badge after the tab bar has loaded in Swift 4

目标是在单个选项卡栏项目上设置徽章,但仅当调用应用中其他地方的其他逻辑时才这样做。现在我有一个 class MainNavigationController 扩展 UITabBarController,这是配置选项卡栏的地方。在 MainNavigationController 中,我还有一个 public 函数,如下所示

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()

试试下面的代码

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

您正在调用其方法的控制器与显示的控制器不是同一个实例,因此它没有连接任何控制器,因此它没有标签栏项目。您必须获得所提供的确切控制器的参考。