如何避免Modal Storyboard无限循环

时间:2012-11-06 05:32:06

标签: xcode ios5 storyboard modal-dialog segue

一年前,我在旧版Xcode上编写了许多iOS应用程序。我刚刚开始一个新项目并在最新的Xcode中发现了故事板功能。事实证明,这对于我正在编写的应用程序来说是完美的,因为它包含~30个相互关联的屏幕。

我的问题是,如何构建我的故事板并进行分段以允许我的应用程序在我的屏幕上遵循循环路径。我已经看到了一些examples,只需将屏幕1转换为屏幕2,然后使用模态选项将屏幕2转换为屏幕1。这显然有效,但是当我调试以这种方式构建的应用程序时,它会为每个执行的segue实例化每个屏幕的新实例(视图控制器)。在下面的图表中(道歉,我画了一张漂亮的图片,但由于我的新手状态,无法发布),如何从屏幕1转到屏幕2到屏幕3并返回到原始屏幕1而不创建新的实例

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

2 个答案:

答案 0 :(得分:3)

好的,自从提出这个问题以来,我做了一些研究,我相信我可以对这个问题提供合理的答案。简而言之,我在问题中提出的方法与故事板和segue实际工作的方式不兼容。 Segues 始终实例化其定位的视图控制器/视图的新实例。这意味着当我们从屏幕3返回到屏幕1时,我们将进入屏幕1的新实例,而不是原始实例。要解决这个问题,我将略微区别地实现故事板。

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

然后,我将在屏幕2和屏幕3中确认屏幕1以侦听“下一屏幕”消息(通过委托/协议)。

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

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

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

答案 1 :(得分:-1)

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