2017-05-01 45 views
-1

我在我的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

[查看收到通知後重置徽章值回0]的可能的複製(http://stackoverflow.com/questions/43704397/resetting-the-badge-value -back-to-0-after-viewing-the-received-notification) – Luzo

回答

1

問題是您的messageBadge屬性在您的UITabBarController沒有在適當的時候重置。我假設你想在選擇標籤時重置它。最直接的方法是實現UITabBarControllerUITabBarControllerDelegate(您可以將其設置爲自己)。然後,將清除該值的代碼移到代表的didSelect方法中。它可以是這個樣子:

func tabBarController(_ tabBarController: UITabBarController, 
        didSelect viewController: UIViewController) 
{ 
    if self.tabBar.selectedItem == messageTab as UITabBarItem { 
     messageBadge = 0 
    } 
} 
+0

這是完美的。非常感謝 – Vandal