目标是在单个选项卡栏项目上设置徽章,但仅当调用应用程序其他地方的某些其他逻辑时。现在我有一个扩展 UITabBarController 的类 MainNavigationController,这是配置选项卡栏的地方。在 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()
最佳答案
您正在调用其方法的 Controller 与显示的 Controller 不是同一个实例,因此它没有连接任何 Controller ,因此它没有标签栏项目。您必须获得所提供的确切 Controller 的引用。
关于swift - 在 Swift 4 中加载标签栏后设置标签栏项目徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432377/