每当用户(设备到设备)之间发送消息时,如果应用程序未处于焦点,则接收用户会收到通知。除了通知之外,该选项卡的徽章值应该增加1.为了尝试这样做,我创建了一个在OneSignal的 handleNotificationReceived 块中启动的NotificationCenter操作(在 initLaunchWithOptions中) )喜欢这样:
handleNotificationReceived: { (notification) in
//Notification
NotificationCenter.default.post(name: MESSAGE_NOTIFICATION, object: nil)
print("Received Notification - \(notification?.payload.notificationID ?? "")")
},
并且观察者位于Messaging选项卡中,其中包含增加标签栏徽章的功能:
NotificationCenter.default.addObserver(self, selector: #selector(addBadge), name: MESSAGE_NOTIFICATION, object: nil)
//Adds a badge to the messages bar
func addBadge(){
self.navigationController?.tabBarController?.tabBar.items?[3].badgeValue = "1"
if #available(iOS 10.0, *) {
self.navigationController?.tabBarController?.tabBar.items?[3].badgeColor = ChatMessageCell.indexedColor
} else {
// Fallback on earlier versions
}
}
但是,我仍然无法获得用户出现的徽章价值
答案 0 :(得分:1)
这取决于您的视图控制器层次结构的设置方式。您尝试访问badgeValue
的方式,可能是因为其中一个可选属性返回nil而未设置。在该行上设置断点并检查它们的值以了解哪一个。
如果您的视图控制器嵌入在导航控制器中,并且该导航控制器是选项卡层次结构中的第一个子控件,例如
UITabBarController - > UINavigationController - >的UIViewController
然后从UIViewController你可以获得像navigationController?.tabBarItem.badgeValue
这样的徽章价值。
navigationController
将返回最近的祖先,即UINavigationController。如果这是选项卡层次结构中的第一个子控制器,则其tabBarItem
属性将返回选项卡的UITabBarItem,您可以在那里更新徽章值。
//Adds a badge to the messages bar
func addBadge(){
if let currentValue = navigationController?.tabBarItem.badgeValue {
let newValue = Int(currentValue)! + 1
navigationController?.tabBarItem.badgeValue = "\(newValue)"
} else {
navigationController?.tabBarItem.badgeValue = "1"
}
if #available(iOS 10.0, *) {
navigationController?.tabBarItem.badgeColor = ChatMessageCell.indexedColor
} else {
// Fallback on earlier versions
}
}