如何在 ios 10 中为不同的本地通知启动不同的视图控制器

Posted

技术标签:

【中文标题】如何在 ios 10 中为不同的本地通知启动不同的视图控制器【英文标题】:how to launch different view controllers for different local notifications in ios 10 【发布时间】:2017-03-05 07:03:30 【问题描述】:

我在不同时间在我的应用中收到多个本地通知。我想根据收到的本地通知为我的应用程序启动不同的视图控制器。我知道 didfinishlaunching 和 didreceive 通知中的启动选项但我不知道如何检测收到的通知并根据收到的通知采取行动。即使我设法做到了,问题是我能够打开一个视图来自应用程序委托的控制器,但它不再附加到导航控制器,否则它会附加到情节提要。怎么做?这是我的代码:

    func application(_ application: UIApplication, didReceive notification: UILocalNotification) 


       let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let customViewController:WebViewController = storyboard.instantiateViewController(withIdentifier: "webVC") as! WebViewController

        let index=Constants.instructionsData.count - 1
        customViewController.url=Constants.instructionsData[index].weblink!
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = customViewController
        self.window?.makeKeyAndVisible()

    

【问题讨论】:

【参考方案1】:

您想在 ios 10 中使用通知,所以我知道您想使用 UNNotification。当您使用 UNNotificationRequest 时,有一个称为标识符的参数。您可以使用它来区分是哪个通知发送此请求。如果您使用“旧”通知,您只需提供将在收到通知时执行的选择器。

编辑: 在您的代码中,您正在更改根视图控制器,那么您希望导航控制器如何持续使用?你没有使用segues。 试试:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let customViewController:WebViewController = storyboard.instantiateViewController(withIdentifier: "webVC") as! WebViewController
self.window?.rootViewController?.navigationController?.pushViewController(customViewController, animated: true)

【讨论】:

在didreceive通知中从通知中获取标识符的方法是什么 试试 response.notification.request.identifier 伙伴,我设法做到了,问题是我能够从应用程序委托打开视图控制器,但它不再附加到导航控制器,否则它会附加到情节提要.该怎么做?

以上是关于如何在 ios 10 中为不同的本地通知启动不同的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在一个应用程序中为不同的事物打开和关闭不同的通知? (iOS、安卓)

iOS中都有哪些不同类型的通知以及如何正确配置它们?

iOS中都有哪些不同类型的通知以及如何正确配置它们?

iOS如何在本地通知上启动后台任务

iOS 10 本地通知未显示

如何在 iOS 10 中为推送通知设置徽章计数?