首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过viewController openURL函数表示导航层次结构中的openURL

通过viewController openURL函数表示导航层次结构中的openURL
EN

Stack Overflow用户
提问于 2015-09-07 23:42:50
回答 1查看 3.4K关注 0票数 2

我的初始视图控制器是一个登录页,它检查当前用户是否已登录。如果是这样,将对下一个视图执行segue,该视图是选项卡条控制器,其默认选择的选项卡是表视图(已嵌入导航控制器中)。

此表视图中有一个事件对象列表。当用户选择事件对象时,事件详细信息在新视图中显示,导航栏出现在上面,允许用户返回到他们的事件列表。这一切都正常运作。

但是,应用程序有一个URL方案,允许通过URL启动它。在我的应用程序代理中,我能够捕获我需要的URL方案和查询。

我的问题是当我试图呈现必要的视图控制器时。实际上,我能够显示视图控制器(这是一个事件细节视图控制器),但是这个视图控制器并不在导航层次结构中,这正是我需要的。无法理解如何做到这一点(同样,下面的代码位于openURL函数的appDelegate中,这是通过我的自定义URL方案调用的):

代码语言:javascript
复制
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        //the viewController to present
        let viewController = storyboard.instantiateViewControllerWithIdentifier("SingleEventAfterCreationViewController") as! SingleEventAfterCreationViewController

        let eventListNavController = storyboard.instantiateViewControllerWithIdentifier("EventsListNavigationController") as! UINavigationController

//set a bunch of properties on my viewController

//below is where I'm unsure. The correct view controller is presented, but the navigation bar above, and tab bar below is lost. Subsequently, when I click on a "user" of the event, the program crashes, I'm guessing because there is no navigation hierarchy. 

self.window?.rootViewController = eventListNavController

                self.window?.rootViewController?.presentViewController(viewController, animated: true, completion: nil)

坠机文本:

由于异常“NSGenericException”终止应用程序,原因是:“无法找到用于segue 'showProfileSegue‘的导航控制器。”只有当源控制器由UINavigationController实例管理时,才能使用Push segues。

为了说明我的问题,我附上了一张我的故事板的图片,以及通过URL打开应用程序时所发生的事情,以及该视图中的操作会使它崩溃。我还附加了一个视图控制器应该是什么样子的图像。

故事板全屏:help.png

我的故事板:

问题是:

它应该是什么样子:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 19:55:14

我想通了。

最初,我在我的故事板中设置了我的初始视图控制器,我把它删除了。我现在以编程方式在AppDelegate的didFinishLoadingWithOptions函数中设置它。

接下来,在我的app委托函数中,我执行了以下操作:

代码语言:javascript
复制
let rootTabBarController = self.window?.rootViewController as! UITabBarController

let firstNavigationController = storyboard.instantiateViewControllerWithIdentifier("EventsListNavigationController") as! UINavigationController

rootTabBarController.viewControllers![0] = firstNavigationController

//the viewController to present
let viewController = storyboard.instantiateViewControllerWithIdentifier("SingleEventAfterCreationViewController") as! SingleEventAfterCreationViewController

//set variables in viewController

firstNavigationController.pushViewController(viewController, animated: true)

当用户尚未登录应用程序时,我可能会遇到问题(因为我通过AppDelegate设置的初始AppDelegate),但我的基本问题已经解决了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32447293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档