在tab页面当中使用setTabBarBadge为什么会报错errMsg":"setTabBarBadge:fail not TabBar page"
时间: 2024-12-23 08:18:07 浏览: 15
在iOS开发中,如果你在一个不是 tabBar 页面(如 UINavigationController 的根视图控制器,而不是 UITabBarController 的直接子控制器)中尝试使用 `setTabBarBadge:` 方法设置 tabBar 标签的角标,会收到类似错误提示 "setTabBarBadge: fail not TabBar page",意思是这个操作在这个上下文中无效。
这是因为`setTabBarBadge:` 是 tabBar 视图控制器 (UITabBarController) 提供的一个方法,用于更新其关联 tabBarItem 的角标状态,只有当当前界面确实是 tabBar 控制器管理的 tab 页面时,这个操作才有效。解决这个问题的方法是在正确的 tabBar 子页面上设置角标,例如:
```swift
if let tabPage = tabBarController?.selectedViewController as? UITableViewController {
tabPage.tabBarItem.badgeValue = "新的通知数"
}
```
或者,在需要更新角标的视图控制器实现 `UITabBarControllerDelegate` 并覆盖 `tabBar(_:unselectedItemDidChange:)` 方法:
```swift
extension YourViewController: UITabBarControllerDelegate {
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if item == tabBar.items![index] { // 替换 index 为你想要更新的 tab 上下文
item.badgeValue = "新的通知数"
}
}
}
```
阅读全文