【问题标题】:How to set the tab bar badge with swift?如何快速设置标签栏徽章?
【发布时间】:2017-08-23 23:56:54
【问题描述】:

如何使用 swift 设置标签栏徽章?例如,当我收到消息图标上显示数字 1 的新消息时! 我是否必须使用 UITabBarItem.swift 并在其中编写代码! 我不确定我该怎么做

谢谢!

【问题讨论】:

  • tabBarController?.tabBar.items?[4].badgeValue = "1"

标签: ios swift uitabbarcontroller


【解决方案1】:

如果您获得了对 tabBarController 的引用(例如,来自 UIViewController),您可以执行以下操作:

if let tabItems = tabBarController?.tabBar.items {
    // In this case we want to modify the badge number of the third tab:
    let tabItem = tabItems[2]
    tabItem.badgeValue = "1"
}

从一个 UITabBarController 它将是 tabBar.items 而不是 tabBarController?.tabBar.items

并删除徽章:

tabItem.badgeValue = nil

【讨论】:

  • 你能解释一下代码吗?什么是 tabArray !
  • 你是从哪里得到 tabArray 的?
  • 我将在哪里使用这段代码?在我的 TabBarController 内部或对应于 tabItem 的 ViewController 内部,例如我的 Notification 选项卡..
  • 以上答案应该是从 uiviewcontroller(嵌套在 TabBarController 中的任何 ViewController)访问标签栏的元素。如果你在 UITabBarController 子类中有实现,我已经扩展了它的样子
  • 我的意思是在其中有一个 TableView 的 Viewcontroller 中使用它。并让徽章显示 tableView 中有多少个单元格
【解决方案2】:

以下行可以帮助您在 UITabBerItem 中显示徽章

tabBarController?.tabBar.items?[your_desired_tabBer_item_number].badgeValue = value

【讨论】:

  • 请在您的代码中添加说明。仅代码答案被认为是低质量的,并且经常被否决,甚至可能被删除。请看How to Answer
  • 1) tabBarController? - 展开,因为我们实际上并不知道它是否存在于我们的 UIVewController 2) .tabBar.items? - 询问 UITabBarController 中 tabBar 中的一组项目,也未包装,因为我们不知道该数组是否使用至少一个 UITabBarItem 3) .[UITabBarItem index in array] 4) .badgeValue - UITabBarItem 徽章的字符串值你想看的。
【解决方案3】:

ViewDidAppear 中设置badgeValue。否则它可能不会从应用加载中出现。

import UIKit

class TabBarController: UITabBarController {

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.tabBar.items![2].badgeValue = "7"
}

}

没有安全检查,因为您通常确定您有带有 n 个标签的 TabBar

【讨论】:

    【解决方案4】:

    如果需要,也可以为徽章值设置一个空字符串以获得红色圆圈:

    tabBarController?.tabBar.items?.last?.badgeValue = ""
    

    【讨论】:

    • 你在 ios 15 中试过了吗?
    • @famfamfam 它也适用于 iOS 15。
    • 不,它在 ios 15 中不起作用
    【解决方案5】:

    我将@Victor 代码放在一个扩展中,以使代码在视图中更小。

    import UIKit
    
    extension UITabBar {
        func addBadge(index:Int) {
            if let tabItems = self.items {
                let tabItem = tabItems[index]
                tabItem.badgeValue = "●"
                tabItem.badgeColor = .clear
                tabItem.setBadgeTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .normal)
            }
        }
        func removeBadge(index:Int) {
            if let tabItems = self.items {
                let tabItem = tabItems[index]
                tabItem.badgeValue = nil
            }
        }
        
     }
    
    
    Application: 
    
     tabBarController?.tabBar.addBadge(index: 1)
    
     tabBarController?.tabBar.removeBadge(index: 1)
    
    
    
    

    【讨论】:

      【解决方案6】:

      感谢@Lepidopteron,为我提供即时解决方案。 另外,您可以使用所选标​​签索引的索引来做到这一点:

      let tabItems = self.tabBarController?.tabBar.items as NSArray!
          var selectedIndex = tabBarController!.selectedIndex //here 
          let tabItem = tabItems![selectedIndex] as! UITabBarItem
          tabItem.badgeValue = "2"
      

      this 帖子中获得参考

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 2018-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多