使用NotificationCenter设置徽章值

时间:2017-05-01 05:01:11

标签: ios swift notifications uitabbarcontroller uitabbar

我在TabBarController类中设置了通知中心观察器。 观察者调用一个名为setMessageBadge的方法,该方法将我设置的变量递增为0.此变量的目的是作为名为MessageController的特定选项卡栏的badgeValue。无论何时调用观察者,消息控制器选项卡都会收到当前变量所在的任何变量的badgeValue,直到用户选择该选项卡,然后badgeValue 重置。

//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方法中,我删除观察者,将标记值设置为nil,并将变量设置为等于参考的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后, 后,变量将从最后一个点继续而不是从我将其设置为0后再次为0。例如,如果有两个通知,则badgeValue应等于2,直到用户单击屏幕。当用户点击屏幕时,它应该等于0.如果用户收到另一个通知,它应该从0开始并转到1但是转到3。

1 个答案:

答案 0 :(得分:1)

问题是,messageBadge中的UITabBarController媒体资源在适当的时间没有重置。我假设您要在选中选项卡时重置它。最直接的方法是实现UITabBarControllerDelegate的{​​{1}}(您可以将其设置为自身)。然后,将您清除值的代码移动到委托的UITabBarController方法中。它看起来像这样:

didSelect