如何用swift设置标签栏徽章?

时间:2017-03-30 07:37:09

标签: ios swift uitabbarcontroller

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

谢谢!

7 个答案:

答案 0 :(得分:69)

如果您获得了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

答案 1 :(得分:15)

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

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

答案 2 :(得分:2)

badgeValue中设置ViewDidAppear。否则,它可能不会在应用程序加载中出现。

import UIKit

class TabBarController: UITabBarController {

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

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

}

没有安全检查,因为通常可以确定TabBar带有n个标签。

答案 3 :(得分:2)

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

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

enter image description here

答案 4 :(得分:2)

我采用了@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)



答案 5 :(得分:1)

感谢@Lepidopteron,我的即时解决方案。 此外,您可以使用所选选项卡索引的索引来执行此操作:

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

this帖子

获得了参考

答案 6 :(得分:0)

快捷键5:

如果您只想添加不带数字的徽章,则只需将number设置为nil

func addBadgeToTabBarItem(number: Int?, atTabBarItemIndex tabBarItemIndex: Int) {
    if let tabBarItems = tabBarController?.tabBar.items {
        let tabBarItem = tabBarItems[tabBarItemIndex]
        if let number = number {
            tabBarItem.badgeValue = String(number)
        } else {
            tabBarItem.badgeValue = "●"
            tabBarItem.badgeColor = .clear
            tabBarItem.setBadgeTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .normal)
        }
    }
        
}
    
func removeBadgeFromTabBarItem(atTabBarItemIndex tabBarItemIndex: Int) {
    if let tabBarItems = tabBarController?.tabBar.items {
        let tabBarItem = tabBarItems[tabBarItemIndex]
        tabBarItem.badgeValue = nil
    }
}