如何使用选项卡和导航控制器实例化视图控制器以进行深度链接?

Posted

技术标签:

【中文标题】如何使用选项卡和导航控制器实例化视图控制器以进行深度链接?【英文标题】:How to instantiate a view controller with tab and nav controller for deep linking? 【发布时间】:2015-07-15 15:47:57 【问题描述】:

我正在为我的应用实施深层链接,但无法正确实例化我的应用。对于我的应用程序链接,它为博客文章打开了一个详细信息页面,因此我将其实例化如下:

var controller = PostDetailController()

问题是底部没有导航标题或标签栏。如何从头开始正确启动我的应用程序,然后加载我的PostDetailController

下面是我的故事板的样子,我正在尝试直接链接到我的“Post Detail Controller”,但它背后有所有以前的控制器,我该怎么做?

【问题讨论】:

【参考方案1】:

有很多不同的方法可以实现这一点。假设您从应用程序委托的 openURL: 方法开始,这里是一种方法的高级视图。

    通过openURL: 方法,从url 中解析出所需的参数并将其存储在全局变量中。 子类化您的UITabBarController 并创建一个函数来处理深层链接。此函数应评估应用程序委托中设置的全局变量,并确定需要显示哪个选项卡和视图。

例如:

        // Check for deep link global var

        if (myGlobalVar==1)
            //Instantiate the destination view (the view you want the deep link to show)
            DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"myDetailView"];

            //set any vars need in the destination view

            //Push the detail View to stack of the to be seleceted Tab
            [[self.viewControllers objectAtIndex:myTABINDEX] pushViewController:detailViewController animated:NO];

            //select the tab to the destination view
            [self setSelectedIndex:myTABINDEX];

         

【讨论】:

谢谢,但我在尝试时遇到了这个错误:Application tried to present modal view controller on itself. Presenting controller is <MyProject.TabBarController.. 您能否更新您的问题以显示您使用的代码以及您实现它的位置。 这个答案没有解释如何处理标签栏内的导航控制器。 根据 OP 的问题和设置,暗示 (#2) 导航控制器显示的视图需要实例化,以便导航控制器显示。在示例代码中,所需的视图被推送到堆栈顶部,[self.viewControllers objectAtIndex:myTABINDEX] 代表导航控制器。

以上是关于如何使用选项卡和导航控制器实例化视图控制器以进行深度链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用没有选项卡或导航控制器的故事板从 AppDelegate 实例化不同的视图?

如何从 segue 中的另一个视图控制器实例化导航和选项卡控制器(显示详细信息)?

如何以编程方式快速实例化具有嵌入式导航控制器的视图控制器?

使用标签栏和导航实例化深度视图控制器

iOS 以编程方式转到选项卡和推送视图控制器

如何使用给定的根视图控制器和初始视图控制器实例化情节提要?