在Swift中更新未选中tabBarItem的徽章

pin*_*olo 11 uitabbarcontroller ios swift

我有一个带有4个标签栏项目的导航控制器.每个人都有一个导航控制器.我希望能够在获得推送通知时更改第4个标签栏徽章编号,无论是在哪个视图或标签中我都需要使用自动布局,因此我无法在应用程序委托中使用任何编程解决方案.我从单个视图模板开始了该项目.

我试图转到所需的标签,更改徽章值并返回,但当然它不起作用.tabBarController似乎只有对当前标签栏项的引用.

    var current = self.tabBarController?.selectedIndex
    self.tabBarController?.selectedIndex = 3
    self.navigationController?.tabBarItem.badgeValue = "34"
    self.tabBarController?.selectedIndex = current!
Run Code Online (Sandbox Code Playgroud)

Kam*_*pai 36

无需选择该索引来更新徽章值.获取一系列标签栏项目.要更新的索引处的选择项,然后将其设置为徽章值.见下面我为第4个标签栏项目做了.

Swift 4.0编辑:

if let items = self.tabBarController?.tabBar.items as NSArray? {
    let tabItem = items.object(at: 3) as! UITabBarItem
    tabItem.badgeValue = "34"
}
Run Code Online (Sandbox Code Playgroud)

  • @ user2363025:你需要让`rootViewController`从`AppDelegate`更新徽章.像这样`让rootViewController = self.window?.rootViewController为!的UITabBarController!让tabArray = rootViewController?.tabBar.items作为NSArray!让tabItem = tabArray.objectAtIndex(1)为!UITabBarItem tabItem.badgeValue ="34"` (3认同)

Eri*_*son 7

短:

let tabItem = self.tabBarController?.tabBar.items![3]
let tabItem.badgeValue = "34"
Run Code Online (Sandbox Code Playgroud)

  • 并且总是更好地使用"if let":if let tabItem = self.tabBarController?.tabBar.items![3] {tabItem.badgeValue = 34} (2认同)