Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Deeplink到特定的ViewController保留视图控制器堆栈_Ios_Iphone_Swift_Deep Linking - Fatal编程技术网

iOS Deeplink到特定的ViewController保留视图控制器堆栈

iOS Deeplink到特定的ViewController保留视图控制器堆栈,ios,iphone,swift,deep-linking,Ios,Iphone,Swift,Deep Linking,我正在为我的一个客户开发一个应用程序,他们希望能够从被终止的应用程序中深入链接到特定的视图控制器。以下是当前堆栈: 发射屏幕 启动屏幕(这里是我们下载配置文件的地方) VC1 VC2 VC3 VC4 VC5 客户端希望能够通过deeplink启动应用程序,并在初始屏幕完成配置文件下载后导航到特定的视图控制器(VC1-VC5)。问题是他们想要保留堆栈。所以我不能简单地从启动屏幕上推VC5,因为VC5需要返回到VC4而不是VC3而不是VC2,等等 处理这个问题的最佳方法是什么?任何帮助都将不胜感

我正在为我的一个客户开发一个应用程序,他们希望能够从被终止的应用程序中深入链接到特定的视图控制器。以下是当前堆栈:

  • 发射屏幕
  • 启动屏幕(这里是我们下载配置文件的地方)
  • VC1
  • VC2
  • VC3
  • VC4
  • VC5
客户端希望能够通过deeplink启动应用程序,并在初始屏幕完成配置文件下载后导航到特定的视图控制器(VC1-VC5)。问题是他们想要保留堆栈。所以我不能简单地从启动屏幕上推VC5,因为VC5需要返回到VC4而不是VC3而不是VC2,等等


处理这个问题的最佳方法是什么?任何帮助都将不胜感激。提前谢谢

可以使用UINavigationController setViewControllers方法一次设置所有导航堆栈。只需创建每个视图控制器的一个实例,并将其传递给导航控制器,如下所示:

navController.setViewControllers([vc1, vc2, vc3, vc4, vc5], animated: true)

请注意,这将覆盖导航堆栈中当前的所有视图控制器。vc1将成为导航控制器的根vc。

如果你有一个故事板,那么你可以有不同的序列转到不同的vc,你可以在appDelegate中添加一个标志。如果应用程序通过url方案启动,则设置此标志。在每次VC viewDidLoad检查该标志时,只需按下较低级别的VCI即可启动应用程序,打开VC1,等待某个方法完成—比如下载上面提到的配置文件OP—然后在这种情况下转换到traget VC-VC5?是的,您可以将视图控制器堆栈设置为任何您想要的。下载配置文件后,在准备转换时调用上述方法。无论数组中最后一个vc是什么,都将显示它。