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