我在我的TabBarController類中設置了通知中心觀察者。 觀察者調用一個名爲setMessageBadge的方法,該方法將我設置爲0的變量遞增。此變量的用途是用作名爲MessageController的特定標籤欄的badgeValue。無論何時調用觀察者,消息控制器選項卡都將接收當前變量所在的badgeValue,直到用戶選擇該選項卡,然後重置badgeValue 應。使用NotificationCenter設置徽章值
//adds the observer. If it goes off then add one to the message badge and display it.
NotificationCenter.default.addObserver(self, selector: #selector(setMessageBadge), name: MESSAGE_NOTIFICATION, object: nil)
//Sets the badge for the message notifications
func setMessageBadge(){
//Check message tab
if let messageTab = self.tabBar.items?[3]{
//if selected
if self.tabBar.selectedItem != messageTab as UITabBarItem {
//Set the message badge value & color
messageBadge += 1
messageTab.badgeValue = "\(messageBadge)"
if #available(iOS 10.0, *) {
messageTab.badgeColor = ChatMessageCell.indexedColor
} else {
// Fallback on earlier versions
}
}
//If the messageTab is selected then the messageBadge should be reset to 0
//But its not. Something with the observer?
if self.tabBar.selectedItem == messageTab as UITabBarItem {
messageBadge = 0
}
}
}
在MessageController選項卡的viewWillAppear中的方法,我除去觀察者,設置徽章值等於零,並設置可變後從基準等於0。
//View Will Appear
override func viewWillAppear(_ animated: Bool) {
//MessageController TAB
//Removes the badgeValue and resets messageBadge to 0 in an attempt to start the loop over.
if let thisTab = self.tabBarController?.tabBar.items?[3]{
NotificationCenter.default.removeObserver(self, name: MESSAGE_NOTIFICATION, object: nil)
thisTab.badgeValue = nil
tabBarControllerClass.removeMessageBadge()
print("This is from the tabBarClass: " + "\(tabBarControllerClass.messageBadge)")
}
}
具有即時通訊現在的問題是,無論何時通知被後觀察用戶點擊MessageController標籤和badgeValue設置爲零的問題,該變量從它的最後一個點繼續,而不是從0開始甚至在我將其設置爲0之後也是如此。例如,如果有兩個通知,那麼badgeValue應該等於2,直到用戶單擊屏幕。當用戶點擊屏幕時,它應該等於0.如果用戶收到另一個通知,它應該從0開始,然後轉到1,而是轉到3.
[查看收到通知後重置徽章值回0]的可能的複製(http://stackoverflow.com/questions/43704397/resetting-the-badge-value -back-to-0-after-viewing-the-received-notification) – Luzo