Обновление счетчика значков панели вкладок из Push Notification, когда приложение находится на переднем плане - PullRequest
2 голосов
/ 12 июня 2019

В моем TabBarController есть вкладка «Уведомления», в которой я хотел бы показать то же количество значков, что и в значке приложения.У меня это работает во всех сценариях, кроме случаев, когда приложение находится на переднем плане.

Для этого я создал собственный класс для моего TabBarController, который регистрируется для уведомления UIApplicationWillEnterForeground и устанавливает значок вкладки Уведомления равнымзначок приложения.Я также делаю это в функции OnLoad ().

Теперь, как мне обновить значок вкладки уведомлений, когда приложение уже находится на переднем плане?Я фиксирую уведомление в функции AppDelegate:

    application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

Я знаю это возможно можно копаться в rootViewController, чтобы найти контроллер панели вкладок, но мой корневой контроллер является моей точкой входак приложению, которое проверяет, есть ли у пользователя токен входа в цепочке для ключей и переходит к контроллеру представления входа или контроллеру панели вкладок.Итак, учитывая, что это вызывает, я не уверен, что это вариант?

Возможно ли, чтобы мой пользовательский интерфейс регистрировался для уведомления «push-уведомления», как способ, которым я регистрируюсь, чтобы получать уведомления о UIApplicationWillEnterForeground?Это было бы идеально, но мне не удалось найти такое уведомление.

Буду признателен за любые советы или подсказки!

1 Ответ

2 голосов
/ 12 июня 2019

Опубликовать уведомление от didReceiveRemoteNotification в AppDelegate и добавить наблюдателя в свой пользовательский TabBarController для прослушивания и обновления пользовательского интерфейса, как показано ниже,

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        return true
    }

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        NotificationCenter.default.post(Notification(name: Notification.Name("didReceiveNotification")))
    }
}

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(
            self,
            selector: #selector(updateBadgeCount),
            name: Notification.Name(rawValue: "didReceiveNotification"),
            object: nil
        )
    }

    @objc private func updateBadgeCount() {
        // Update badge count
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...