目标是在单个选项卡栏项上设置徽章,但仅在调用应用程序其他位置的其他逻辑时才设置。现在,我有一类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()
答案 0 :(得分:1)
您要调用其方法的控制器与所显示的控制器不是同一实例,因此它没有连接任何控制器,因此没有选项卡栏项。您必须获取要显示的确切控制器的参考。
答案 1 :(得分:0)
尝试下面的代码
if let tabbar = self.tabBarController as? MainNavigationController {
tabbar.setBadge()
}