首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确更新TabBarItem的Badge值?

如何正确更新TabBarItem的Badge值?
EN

Stack Overflow用户
提问于 2017-01-31 01:28:43
回答 3查看 1.3K关注 0票数 1

我有一个三个tableViewController,它们由tabBarController管理。和其他应用程序一样,每个tabBarItem都必须得到过期项目的提醒。在我的第一个tableViewController中,我尝试在tabBarItembadgeValue中显示过期项目的计数。这些数值都来自fetchedResultsControllerfetchedObjects.count,它的工作状态很好。

代码语言:javascript
运行
复制
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。

如何正确显示TabBarItembadgeValue

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-01 01:30:40

我建议你实现controllerDidChangeContent,它是你的fetchedResultsController的一个委托方法。每次你的型号改变,这将被调用,你可以查询计数和更新你的徽章号码。

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 02:36:30

为了清除我的,我只是将badgeValue设置为空,而不是"":

代码语言:javascript
运行
复制
tabController.tabBar.items[0].badgeValue = nil
票数 1
EN

Stack Overflow用户

发布于 2020-05-31 03:28:28

我找到了一个Swift 5解决方案来设置tabBar项目,当你想要能够移动你的tabBar项目时,它不仅仅是标记固定的tabBar项目位置的徽章。以下是我的解决方案,适用于将UiView放置在tabBar中的任何位置:

代码语言:javascript
运行
复制
// 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的渠道来收集信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41941891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档