【问题标题】:How to avoid Modal Storyboard infinite loop如何避免模态故事板无限循环
【发布时间】:2012-10-26 01:08:29
【问题描述】:

一年前,我在旧版本的 Xcode 上编写了许多 iOS 应用程序。我刚刚开始了一个新项目,并在最新的 Xcode 中发现了故事板功能。事实证明,这非常适合我正在编写的应用程序,因为它由大约 30 个相互关联的屏幕组成。

我的问题是,我如何构建我的故事板和 segues 以允许我的应用程序遵循循环路径通过我的屏幕。我见过许多examples 使用模态选项简单地将屏幕 1 连接到屏幕 2,然后将屏幕 2 连接到屏幕 1。这显然有效,但是当我调试以这种方式构建的应用程序时,它会为每个执行的 segue 实例化每个屏幕(视图控制器)的新实例。在下图中(抱歉,我画了一张漂亮的图片,但由于我的新手状态,无法发布),我如何从屏幕 1 转到屏幕 2 再到屏幕 3 并返回原始屏幕 1 而无需创建新的实例?

// Screen 1 --> Screen 2 --> Screen3 
//     ^                         | 
//     |                         | 
//     +-------------------------+ 

【问题讨论】:

    标签: xcode ios5 storyboard modal-dialog segue


    【解决方案1】:

    好的,自从提出这个问题以来,我已经做了很多研究,我相信我可以为这个问题提供一个合理的答案。简而言之,我在问题中提出的方法与故事板和转场的实际工作方式不兼容。 Segues 总是 实例化它所针对的视图控制器/视图的新实例。这意味着当我们从屏幕 3 回到屏幕 1 时,我们将转到屏幕 1 的新实例,而不是原来的实例。为了解决这个问题,我将稍微不同地实现情节提要。

    // Screen 1 --> Screen 2
    //     |
    //     +------> Screen 3
    

    然后我将配置屏幕 1 以监听来自屏幕 2 和 3 的“下一个屏幕”消息(通过委托/协议)。

    当屏幕 1 上的用户选择屏幕 2 的按钮时,故事板和 segue 将处理屏幕 2 的模态实例化。当屏幕 2 上的用户选择“下一个屏幕”按钮,而不是转到屏幕 3 时,我将关闭屏幕 2 并让屏幕 1 通过新的屏幕 1 -> 屏幕 3 segue 启动屏幕 3。

    这种方法的优点是允许屏幕 1 成为循环中所有后续屏幕的主控制器(在我的例子中,循环中有 10 个屏幕/练习)。唯一的缺点是故事板不能很好地反映屏幕的流程。

    我希望这可以帮助其他尝试在他们的 iOS 项目中实现相同目标的人。

    【讨论】:

      【解决方案2】:

      我找到了很好的解决方案 - 为关闭源视图控制器创建新的自定义 segue。怎么做?为了创建这个你可以看到链接http://jeffreysambells.com/2014/02/19/dismissing-a-modal-view-using-a-storyboard-segue 我希望对其他人有所帮助=)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        相关资源
        最近更新 更多