Answers:
这被称为“ Unwind Segue ”。不幸的是,到目前为止,除了XCode 4.5的新功能列表中的简要说明外,没有任何文档说明:
放开序列可以允许过渡到情节提要中的现有场景实例
好消息是,WWDC 2012上有一个会议解释这些生物(除其他事项外)。
您只需使用开发者帐户详细信息登录到Apple的iOS开发中心,然后转到WWDC 2012视频页面,并观看“在应用程序中采用情节提要”(从顶部开始,排名第五),讨论解散时间的开始时间为37:20 。
更新: 这是Apple文档中有关此主题的更多信息
一个名为Exit的占位符对象,用于平移序列。默认情况下,当用户关闭子场景时,该场景的视图控制器将展开(或返回)到父场景,即原始过渡到子场景的场景。但是,Exit对象使视图控制器可以展开到任意场景。
(来自iOS6文档集>常规>入门)
这是一个如何实现一个很好的示例
另一个更新:
想象一下,您的故事板上有一系列视图:
A -> ... -> Z
您希望在视图上有一个按钮,Z
该按钮允许用户一直返回A
。
因此,您需要做的就是给出要一直返回到A
该实例的视图,在这种情况下,该实例方法被标记为a IBAction
并接受一个type类型的参数UIStoryboardSegue *
。方法和变量的名称无关紧要。在实现中您所做的也没有关系。这是一个例子:
Obj-C:
在A
的界面(不是Z
)中:
- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;
在A
的实现(不是Z
)中:
- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
// Only "implemented" to satisfy a respondsToSelector: search.
// You can actually implement more stuff here, if you want, IE, if
// you need to reach out to a server to mention that this screen was
// returned to from a later screen.
}
Swift:
在A
的来源(不是Z
)中:
@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
// Only "implemented" to satisfy a respondsToSelector: search.
// You can actually implement more stuff here, if you want, IE, if
// you need to reach out to a server to mention that this screen was
// returned to from a later screen.
}
现在,在情节提要中,control将Z
(例如,取消按钮)上的元素拖到Z
的Exit
。它将扫描视图层次结构中更高级别的所有视图,这些视图IBAction
仅接受一个UIStoryboardSegue *
作为动作,并列出它们供您选择。
希望这比现有的答案更直接,更有用。我发现此链接特别有用,因此,如果有一个细节在您阅读我的答案后仍然不清楚,那么也许可以为您提供帮助(我试图将这篇长文章中的所有有用信息浓缩为一个简短的答案): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html
另请参见无法连接情节提要板解散Segue,其中阐明了使“退出”图标生效的要求。在视图控制器层次结构中的较高位置,您必须具有以下方法:
标记为IBAction
接受一个参数,即UIStoryboardSegue *
如果同时满足这两个条件,则“退出”图标将看到它,并允许您通过从同一视图控制器中的按钮拖动来进行连接。
我现在还在这里发布了世界上最简单的示例:
https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard(固定于2013年7月12日)
这显示了现在与呈现的视图控制器之间来回切换非常容易,这与您之前为来回传递信息而必须做的所有工作相反(模板中包含委托和协议的内容) ,现在都可以将其删除)。
只是在需求定义中添加一些细微之处可能会有所帮助。这基于Xcode 4.6中的实验。我发现,只有通过方法的declaring(!)才能从Xcode启用所需的控件拖动响应。这是我发现的全部要求:
IBAction
UIStoryboardSegue
*的参数.M
实现部分中的方法])。.M
除appdelegate类外,它可以在任何类的接口声明中,甚至可以在的接口部分中。(我没有看到它在控制器层次结构中的位置有任何依赖性。您可以添加任何旧文件,并且系统似乎会聚合所有具有该UIStoryboardSegue
参数的方法,并将它们显示在“退出”图标的菜单上。)请注意,按住Control键并拖动如果该方法属于您在情节提要编辑器中操作的场景的类中,则菜单甚至会向您显示您的方法,但该菜单将显示为无冒号,并且在运行时似乎不会触发任何操作。例:
-(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;