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