You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何基于UserDefaults数组的array.count设置UITabBar Badge?

实现动态更新UITabBar Badge显示UserDefaults数组元素数量

我来给你一步步拆解实现方法,都是实际项目里常用的靠谱方案:

1. 监听UserDefaults中数组的变化

因为数组存在UserDefaults里,要实现动态更新badge,得实时感知数组的变动。我们可以用UserDefaults.didChangeNotification通知来监听变化:

// 在你的TabBarController的viewDidLoad中添加监听
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 监听UserDefaults的变更通知
    NotificationCenter.default.addObserver(self, selector: #selector(updateTabBarBadge), name: UserDefaults.didChangeNotification, object: nil)
    
    // 页面初始化时先手动设置一次badge值
    updateTabBarBadge()
}

// 记得在销毁时移除监听,避免内存泄漏
deinit {
    NotificationCenter.default.removeObserver(self)
}

2. 编写Badge更新逻辑

接下来实现核心的updateTabBarBadge方法,负责从UserDefaults取数组、计算数量,再同步到对应TabBarItem上:

@objc private func updateTabBarBadge() {
    // 替换成你自己存储数组的UserDefaults Key
    let targetArray = UserDefaults.standard.array(forKey: "YourCustomArrayKey") ?? []
    let itemCount = targetArray.count
    
    // 获取你要设置badge的TabBarItem,比如第二个tab就用索引1,按需调整
    guard let targetTabItem = tabBar.items?[0] else { return }
    
    // 数量为0时隐藏badge,否则显示数字
    targetTabItem.badgeValue = itemCount > 0 ? "\(itemCount)" : nil
    
    // 可选:自定义badge样式,比如红色背景+白色文字
    targetTabItem.badgeColor = .systemRed
    targetTabItem.setBadgeTextAttributes([.foregroundColor: UIColor.white], for: .normal)
}

3. 关键注意点

  • 数组修改后要同步UserDefaults:每次修改数组后,务必调用同步方法(iOS10+虽自动同步,但手动调用更稳妥),这样通知才会触发。示例:
// 修改数组并同步到UserDefaults
var tempArray = UserDefaults.standard.array(forKey: "YourCustomArrayKey") ?? []
tempArray.append("new element")
UserDefaults.standard.set(tempArray, forKey: "YourCustomArrayKey")
UserDefaults.standard.synchronize()
  • 索引对应正确:确认tabBar.items的索引和你要设置badge的tab对应,别搞混顺序。
  • 更安全的监听方式(iOS10+):可以用Block-based的通知监听,不用手动移除,减少内存泄漏风险:
NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, queue: .main) { [weak self] _ in
    self?.updateTabBarBadge()
}

这样设置后,只要UserDefaults里的数组发生变化,TabBar的Badge就会自动更新啦,亲测好用!

内容的提问来源于stack exchange,提问作者Bogdan59

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:13:00