2 votes

UNUserNotificationCenter doit présenter le code willPresent

J'ai une application écrite en Swift qui utilise UNUserNotificationCenter et qui présente des notifications lorsque l'application est au premier plan.

Ce que je veux faire, c'est mettre à jour l'interface utilisateur une fois que la notification a été délivrée et que l'application est au premier plan. Ce qui suit présente la notification sans problème, mais lorsqu'elle est présentée, je veux aussi exécuter une fonction appelée updateUI() car la date de la notification est dans mon interface utilisateur et je veux l'effacer dès que la notification apparaît.

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert,.sound])
    }

Je ne sais pas comment ajouter l'appel à udateUI() dans le gestionnaire d'achèvement. Quelqu'un peut-il m'aider ?

4voto

Sid Mhatre Points 2079

Vous pouvez POST nouvelle notification de votre part AppDelegate et ajoutez Observer dans votre fichier contrôleur pour modifier l'interface utilisateur.

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    UIApplication.shared.applicationIconBadgeNumber = 0
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "NewNotification") , object: nil, userInfo: response.notification.request.content.userInfo)
}

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler(.alert)
}

Ajouter Notification Observer dans votre fichier contrôleur :

NotificationCenter.default.addObserver(self, selector: #selector(pushNotificationHandler(_:)) , name: NSNotification.Name(rawValue: "NewNotification"), object: nil)

puis appeler la méthode de mise à jour de l'interface utilisateur :

 func pushNotificationHandler(_ notification : NSNotification) {
    self.udateUI()
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X