UNUserNotificationCenter需要提供代码

时间:2018-02-20 00:35:16

标签: ios swift xcode unusernotificationcenter usernotifications

我有一个用Swift编写的应用程序,它使用UNUserNotificationCenter,当应用程序位于前台时,我会让它显示通知。

我想要做的是在通知发布后更新UI并且应用程序位于前台下面介绍通知就好了,但是当它出现时,我还想执行一个名为updateUI()的函数因为通知日期在我的用户界面中,我想在通知出现后立即将其清除。

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

我不知道如何在完成处理程序中添加对udateUI()的调用。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您可以POST来自AppDelegate的新通知,并在控制器文件中添加观察者以更改用户界面。

@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)
}

在控制器文件中添加通知观察器:

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

然后调用UI更新方法:

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