我正在制作iOS应用程序。我在哪里,我在某些地方附近收到通知。这很好。但是,当我按下通知时,我希望它导航到某个视图。我想的就像我得到短信一样。我按下该短信通知,然后导航我正确的短信对话。
当应用程序收到推送通知时,将调用UIApplicationDelegate中的方法。通知需要根据您的应用收到时的状态而有所不同:
如果应用程序未运行且用户通过点击推送通知启动它,则推送通知将在launchOptions中传递给您的应用
application(_:didFinishLaunchingWithOptions:)
如果app正在运行并且在前台,则不会显示推送通知,此功能将立即调用
application(_:didReceiveRemoteNotification:)
如果app在后台运行或暂停,并且用户通过点击推送通知将其置于前台,则将调用此函数。
application(_:didReceiveRemoteNotification:)
所以你可以在这些函数上更改根视图控制器,如下所示: -
if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {
//Change your root view controller
}
这将检查launchOptions中是否存在UIApplicationLaunchOptionsRemoteNotificationKey的值。如果是,则这将是您发送的推送通知有效负载。
我编写了一个简单的类,通过传递类类型,从一行代码中的任何位置导航到视图层次结构中的任何视图控制器,因此您将编写的代码也将与视图层次结构本身分离,例如:
Navigator.find(MyViewController.self)?.doSomethingSync()
Navigator.navigate(to: MyViewController.self)?.doSomethingSync()
..或者你也可以在主线程上异步执行方法:
Navigator.navigate(to: MyViewController.self) { (MyViewControllerContainer, MyViewControllerInstance) in
MyViewControllerInstance?.doSomethingAsync()
}
这里是GitHub项目链接:https://github.com/oblq/Navigator