我有一个三个tableViewController
,它们由tabBarController
管理。和其他应用程序一样,每个tabBarItem
都必须得到过期项目的提醒。在我的第一个tableViewController
中,我尝试在tabBarItem
的badgeValue
中显示过期项目的计数。这些数值都来自fetchedResultsController
的fetchedObjects.count
,它的工作状态很好。
func tabBarBadgeUpdater() {
for viewController in (self.tabBarController?.viewControllers)! {
let overdue = self.fetchedResultsController.fetchedObjects?.filter({ (record) -> Bool in
return (record.date?.compare(Date()) != .orderedDescending)
})
print(overdue!.count)
if viewController.tabBarItem.tag == 1 {
if overdue!.count != 0 {
DispatchQueue.main.async(execute: {
viewController.tabBarItem.badgeValue = "\(overdue!.count)"
viewController.tabBarItem.badgeColor = UIColor.init(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0)
self.tableView.reloadData()
})
} else {
DispatchQueue.main.async(execute: {
viewController.tabBarItem.badgeValue = ""
viewController.tabBarItem.badgeColor = .clear
self.tableView.reloadData()
})
}
}
}
}
但我的问题是删除它们。当我试图从模型中删除最后一个对象时,它仍然显示值1。
如何正确显示TabBarItem
的badgeValue
?
发布于 2017-02-01 01:30:40
我建议你实现controllerDidChangeContent
,它是你的fetchedResultsController
的一个委托方法。每次你的型号改变,这将被调用,你可以查询计数和更新你的徽章号码。
发布于 2017-01-31 02:36:30
为了清除我的,我只是将badgeValue设置为空,而不是"":
tabController.tabBar.items[0].badgeValue = nil
发布于 2020-05-31 03:28:28
我找到了一个Swift 5解决方案来设置tabBar项目,当你想要能够移动你的tabBar项目时,它不仅仅是标记固定的tabBar项目位置的徽章。以下是我的解决方案,适用于将UiView放置在tabBar中的任何位置:
// set badge value on your own nav controller
self.navigationController?.tabBarItem.badgeValue = scoreBoxLabelOutlet.text
// Then use a nil value to remove the Badge Item.
self.navigationController?.tabBarItem.badgeValue = nil
我用了一个叫scoreBoxLabelOutlet.text的渠道来收集信息。
https://stackoverflow.com/questions/41941891
复制相似问题