当应用处于后台模式时更改tabBar徽章(swift ios)

时间:2018-02-02 17:42:16

标签: ios swift notifications

我知道如果我在UIApplicationDelegate注册UNUserNotificationCenter而在前台模式注册应用,我会轻易更改TabBarItem.badgeValue。我只需要在func userNotificationCenter(...)

中插入一段代码

但是,当应用处于后台模式时,如何做同样的事情? (像WhatsApp那样)

1 个答案:

答案 0 :(得分:1)

简单回答......你没有。 UI更改必须位于主线程上。相反,我建议您在UIApplicationDidBecomeActive注册NotificationCenter通知并更新徽章价值。

(我在下面的代码中使用UserDefaults是出于方便而仅举例。我可能会建议您根据在应用中存储状态的方式使用其他存储方法。)

后台代码:

let badgeValue = 100
UserDefaults.standard.set(badgeValue, forKey: "badgeValue")

在视图控制器中:

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        //set it here for when view controller is loaded
        let badgeValue = UserDefaults.standard.string(forKey: "badgeValue")
        self.tabBarItem.badgeValue = badgeValue

        NotificationCenter.default.addObserver(forName: Notification.Name.UIApplicationDidBecomeActive, object: nil, queue: OperationQueue.main) { [weak self] (notification) in
            //set it here for when you come back from the background
            let badgeValue = UserDefaults.standard.string(forKey: "badgeValue")
            self?.tabBarItem.badgeValue = badgeValue
        }
    }
}