我在我的tabbarcontroller类中设置了一个通知中心观察者。观察者调用一个名为SetMessageBadge的方法,该方法将我设置为0的变量增加了。该变量的目的是作为称为MessageController的特定标签栏的徽章。每当调用观察者时,"消息控制器"选项卡将接收到当时的任何变量的徽章值,直到用户选择该选项卡,然后badgevalue 应该 reset。
。//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选项卡和徽章,并将徽章设置为nil,该变量从最后一个点开始,而不是从其上点开始0再次将其设置为0。例如,如果有两个通知,则徽章值应等于2,直到用户单击屏幕为止。当用户单击屏幕时,它应等于0。如果用户收到另一个通知,则应从0开始并转到1,但转到3。
问题是您在UITabBarController
中的messageBadge
属性在适当的时候并不重置。我假设您要在选定选项卡时将其重置。最直接的方法是实现UITabBarController
的UITabBarControllerDelegate
(您可以将其设置为自身(。然后,移动您拥有的代码将值清除到委托的didSelect
方法中。它看起来像这样:
func tabBarController(_ tabBarController: UITabBarController,
didSelect viewController: UIViewController)
{
if self.tabBar.selectedItem == messageTab as UITabBarItem {
messageBadge = 0
}
}