如何避免模态故事板无限循环



我一年前已经在Xcode的旧版本上编写了许多iOS应用程序。我刚刚启动了一个新项目,并在最新的Xcode中发现了故事板功能。事实证明,这对于我正在编写的应用程序非常完美,因为它包含约30个相互联系的屏幕。

我的问题是,我如何构建我的故事板和序列,以允许我的应用程序沿着屏幕沿着圆形路径遵循。我已经看到了许多示例,这些示例只需将屏幕1删除到屏幕2,然后使用模态选项屏幕2到屏幕1。这显然有效,但是当我调试以这种方式构建的应用程序时,它会为每个执行的segue实例化每个屏幕(视图控制器)的新实例。在下图(抱歉,我画了一张漂亮的图片,但是由于我的新手身份,无法发布它),我该如何从屏幕1转到屏幕2到屏幕3,然后返回原始屏幕1,而无需创建新的屏幕1实例?

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

好吧,自提出这个问题以来,我做了很多研究,我相信我可以为这个问题提供合理的答案。简而言之,我在问题中提出的方法与故事板和赛格的实际工作方式不兼容。segues 始终实例化了视图控制器/视图的新实例。这意味着,当我们从屏幕3回到屏幕1时,我们将转到屏幕1的新实例,而不是原始实例。为了解决这个问题,我将以略有不同的方式实现故事板。

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

然后,我将使屏幕1从屏幕2和3中收听"下一个屏幕"消息(通过委托/协议)。

当屏幕1上的用户选择屏幕2的按钮时,故事板和SEGUE将处理屏幕的模态实例。我将通过新屏幕1->屏幕3 SEGUE解开屏幕2,并使用屏幕1启动屏幕3。

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

我希望能帮助他人尝试在iOS项目中实现同样的事情。

我找到了很好的解决方案,以创建新的自定义segue,以解散源视图控制器。那怎么样?为了创建此功能,您可以看到链接http://jeffreysambells.com/2014/02/19/dismissing-a-modal-view-view-using-a-s-a-storyboard-segue我希望对他人有帮助=)

最新更新