Ios Swift导航到从通知查看

Ios Swift导航到从通知查看,ios,swift,notifications,Ios,Swift,Notifications,我正在制作一个iOS应用程序。当我靠近某些地方时,我会收到通知。这很好。但是当我按下通知时,我希望它导航到某个视图。 我的想法就像收到短信一样。我为sms按下该通知,然后它将我导航到正确的sms对话。当应用程序收到推送通知时,将调用UIApplicationLegate中的方法。根据收到应用程序时的状态,需要对通知进行不同的处理: 如果应用程序没有运行,用户点击推送按钮启动应用程序 通知,推送通知将在 发射选项 如果应用程序正在运行且处于前台,则推送通知 不会显示此函数将立即调用 如果应用程序正

我正在制作一个iOS应用程序。当我靠近某些地方时,我会收到通知。这很好。但是当我按下通知时,我希望它导航到某个视图。
我的想法就像收到短信一样。我为sms按下该通知,然后它将我导航到正确的sms对话。

当应用程序收到推送通知时,将调用UIApplicationLegate中的方法。根据收到应用程序时的状态,需要对通知进行不同的处理:

如果应用程序没有运行,用户点击推送按钮启动应用程序 通知,推送通知将在 发射选项

如果应用程序正在运行且处于前台,则推送通知 不会显示此函数将立即调用

如果应用程序正在后台运行或挂起,并且用户 点击推送通知,将其发送到前台,此功能 将被调用

因此,您可以在以下函数上更改根视图控制器:-

    if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {
       //Change your root view controller
     }

这将检查启动选项中是否存在UIApplicationLaunchOptions远程通知键的值。如果有,这将是您发送的推送通知有效负载。

我编写了一个简单的类,通过传递类类型,从一行代码中的任意位置导航到视图层次结构中的任何视图控制器,因此您将编写的代码也将与视图层次结构本身分离,例如:

Navigator.find(MyViewController.self)?.doSomethingSync()
Navigator.navigate(to: MyViewController.self)?.doSomethingSync()
..或者您也可以在主线程上异步执行方法:

Navigator.navigate(to: MyViewController.self) { (MyViewControllerContainer, MyViewControllerInstance) in
    MyViewControllerInstance?.doSomethingAsync()
}

这里是GitHub项目链接:

那么这将在我的AppDelegate中,我应该处理它吗?明白了吗?它是否也应该存在?创建通知的函数是什么?现在是在主视图控制器中被调用,而不是在主视图控制器中,这是错误的。完成本教程的最后一部分。你会明白的。我用来发出通知的是UIApplication.sharedApplication().presentLocalNotificationNow(通知)。更确切地说,我使用的是iBeacon,所以当我接近iBeacon时,我希望它发出通知。然后我用iBeacon的ID调用了我的服务器,并得到了一个响应,根据这个响应显示一些内容。但这将以不同于主视图的视图显示。但是谢谢你的投入和指导。我会试着看看它,看看我是否能让它正常工作。我认为它有相同的概念。这里有一个有用的链接
    if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {
       //Change your root view controller
     }
Navigator.find(MyViewController.self)?.doSomethingSync()
Navigator.navigate(to: MyViewController.self)?.doSomethingSync()
Navigator.navigate(to: MyViewController.self) { (MyViewControllerContainer, MyViewControllerInstance) in
    MyViewControllerInstance?.doSomethingAsync()
}