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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: ios objective-c xcode uiviewcontroller xcode-storyboard


    【解决方案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”应该是第二个故事板中第一个控制器的类名。
    猜你喜欢
    • 2013-05-11
    • 2012-11-16
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多