我的应用程序中有一个tabBar。我想在通知到来时显示带有许多未读消息的徽章。到目前为止,我的代码在下面。 问题在于消息选项卡并不总是列表中的第一项(顺序因不同的应用程序设置而异,但始终存在)。如果不知道它具有哪个索引,该如何在其上设置徽章?
if let item = self.tabBar.items?.first {
var count = messages.count
if item.badgeValue != nil {
count += Int(item.badgeValue!) ?? 0
}
item.badgeValue = "\(count)"
}
答案 0 :(得分:1)
您在第一行中获得了第一项-因此它可以按预期运行。
您需要以这种方式来组织UITabBar
,以便您始终可以识别出要显示哪些索引消息。
一个想法是在配置UITabBar
时保留对其的引用-这样,您始终可以找到显示索引消息的位置。
最好的方法是在UITabBar
后面保留相应的视图数组,然后找到所需的视图。
如果您使用的是UITabBarController
,则将免费获得-所有UIViewController
都可以通过名为viewControllers
的属性直接访问。
如果您有自定义ViewController
而只有UITabBar
-您只需要构建类似的逻辑即可跟踪特定视图控制器显示在哪个索引上。
答案 1 :(得分:0)
假设标签栏由UITabBarController
管理,则可以通过检查标签栏控制器中视图控制器的类型来确定索引。
class MessagesViewController: UIViewController {
// ... your messages vc
}
if let index = tabbarController.viewControllers?.firstIndex(where: { $0 is MessagesViewController }) {
tabbarController.tabBar.items?[index].badgeValue = "..."
}