通过替换 Windows 根控制器在多个故事板之间移动

Posted

技术标签:

【中文标题】通过替换 Windows 根控制器在多个故事板之间移动【英文标题】:Move between multiple storyboards by replacing the windows root controller 【发布时间】:2013-12-01 07:08:59 【问题描述】:

要在单个故事板上的 VC 之间移动,我使用帖子中的第一个自定义 segue: bidirectional storyboard travel without stacking 这会将窗口的根视图控制器替换为目标视图控制器,因此 VC 不会堆叠并导致内存分配问题。

我需要使用多个情节提要,因此我正在寻找一种方法,即转移到第二个情节提要,用新情节提要的初始 VC 替换 Windows 根控制器(即与我在整个过程中使用的自定义 segue 类似的方式项目的其余部分。)

该解决方案理想地适用于 ios6 和 IOS7(伪segue 方法已更新为仅 IOS7)

有什么想法吗?

【问题讨论】:

【参考方案1】:

你不能用 segue 做到这一点。只能在同一故事板中的控制器之间进行转场。做到这一点的唯一方法是在代码中实例化第一个控制器,并将其设置为窗口的根视图控制器。

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"SomeOtherStoryboard" bundle:nil];
NewController *new = [sb instantiateInitialViewController];
self.view.window.rootViewController = new;

【讨论】:

我认为我应该将此代码放在源 VC 上的 IBAction 中? 抱歉,我还假设我将“SomeOtherStoryboard”更改为新故事板的名称,但我是否也将“storyboardWithName”更改为现有故事板名称? @Mat,是的,它们都应该是您的故事板文件的名称(不带 .storyboard 后缀)。 我不断遇到语义问题。我创建了一个名为“Second.storyboard”的新故事板。然后,我通过 main.storyboard 的 VC 上的按钮在 ViewController.m 文件中设置了 IBAction。在 IBAction 中,我粘贴了上面的代码,然后将“SomeOtherStoryboard”更改为“Second”。当我运行应用程序时,我遇到了一系列语义问题:使用未声明的标识符 'Second'、'sb'、'New Controller'、'New'、'sb'、'new' @Mat,对不起,Mat,我把你误入歧途了。 sb 应该输入到 UIStoryboard,只有名称应该是“Second”。 “NewController”应该是第二个故事板中第一个控制器的类名。

以上是关于通过替换 Windows 根控制器在多个故事板之间移动的主要内容,如果未能解决你的问题,请参考以下文章

在多个故事板环境中展开 segue

在多个子类之间共享故事板视图控制器

在故事板之间保持导航控制器(swift)

如何使用单个故事板uiviewcontroller为多个子类

故事板中视图控制器之间的共享实例

如何在 XCode 中预览故事板的不同视图控制器