2017-05-01 7 views
-1

通知センターオブザーバを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

[受信通知を表示した後0に戻しバッジ値をリセット]の可能複製(http://stackoverflow.com/questions/43704397/resetting-the-badge-value:それはこのような何かを見ることができます受信後通知後0) – Luzo

答えて

1

問題はmessageBadgeですUITabBarControllerは、適切な時刻にリセットされません。私はあなたがタブが選択されているときにそれをリセットすると仮定します。これを行う最も簡単な方法は、UITabBarControllerUITabBarControllerDelegateを実装することです(それだけで設定できます)。次に、値をクリアするコードをデリゲートのdidSelectメソッドに移動します。

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

これは完璧です。どうもありがとうございます – Vandal

関連する問題