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

标签 swift uitabbarcontroller

目标是在单个选项卡栏项目上设置徽章,但仅当调用应用程序其他地方的某些其他逻辑时。现在我有一个扩展 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/

相关文章:

ios - 什么是 PHImageRequestOptionsResizeMode 默认值?

ios - 当某些按钮隐藏时,快速自动布局会更改按钮位置

iphone - GUI 被 uibackgroundmodes= voip, audio 困住

ios - Swift:更改标签栏的图像色调颜色?

ios6 - iCarousel 与 iOS 6.1 中具有标签栏 Controller 的应用程序集成

ios - 如何更改标签栏上的非事件图标/文本颜色?

ios - 如何显示导航左栏按钮?

swift - 将当前坐标打印到标签(Swift、Xcode8)

ios - swift:从数组中添加值

swift - 回到tabBarController,swift