通知センターオブザーバをTabBarControllerクラスに設定しました。 オブザーバーは、setMessageBadgeというメソッドを呼び出します。このメソッドは、0に設定した変数をインクリメントします。この変数の目的は、MessageControllerという特定のタブバーのbadgeValueとして機能することです。オブザーバが呼び出されるたびに、メッセージコントローラタブは、ユーザがそのタブを選択するまでその時点の変数の値であるbadgeValueを受け取り、badgeValue はにリセットする必要があります。 MessageControllerタブのviewWillAppear方法において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
}
}
}
、Iは、オブザーバーを除去ゼロに等しいバッジ値を設定し、基準から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がnilに設定されますたびイムは、IS今持っていることの問題は、変数は、その最後の点から続行代わりの0から始まりますもう一度0に設定した後でも同じです。たとえば、2つの通知がある場合、ユーザーが画面をクリックするまで、badgeValueは2に等しくなければなりません。ユーザーが画面をクリックすると、0になるはずです。ユーザーが別の通知を受け取った場合は、0から1に移動し、3になります。
[受信通知を表示した後0に戻しバッジ値をリセット]の可能複製(http://stackoverflow.com/questions/43704397/resetting-the-badge-value:それはこのような何かを見ることができます受信後通知後0) – Luzo