Xcode 4.5故事板“退出”


102

我刚刚安装了支持iOS6的Xcode 4.5,并且在我的Storyboard中看到了一个名为“ Exit”的新图标,该图标与“ First Responder”等一起在视图控制器下方列出。一个带有绿色小图标,标有“ Exit”。

我可以在上面找到任何东西,也无法确定如何使用它。

任何人都知道它,它是如何工作的,它有什么用?


1
在类似的问题上,我发布了以下答案:stackoverflow.com/questions/12569316/… 它有助于说明如何使用退出(展开)功能
Eric

Answers:


72

这被称为“ Unwind Segue ”。不幸的是,到目前为止,除了XCode 4.5的新功能列表中的简要说明外,没有任何文档说明:

放开序列可以允许过渡到情节提要中的现有场景实例

好消息是,WWDC 2012上有一个会议解释这些生物(除其他事项外)。

您只需使用开发者帐户详细信息登录到Apple的iOS开发中心,然后转到WWDC 2012视频页面,并观看“在应用程序中采用情节提要”(从顶部开始,排名第五),讨论解散时间的开始时间为37:20 。


更新: 这是Apple文档中有关此主题的更多信息

一个名为Exit的占位符对象,用于平移序列。默认情况下,当用户关闭子场景时,该场景的视图控制器将展开(或返回)到父场景,即原始过渡到子场景的场景。但是,Exit对象使视图控制器可以展开到任意场景。

(来自iOS6文档集>常规>入门)

这是一个如何实现一个很好的示例


另一个更新:

这是Apple关于此主题的技术说明


3
好,那你怎么用呢?尝试从ViewController底部的退出对象上按住Control键单击,但它不会链接到任何内容。
垫片

4
基本上,您必须为展开搜索定义一个方法,然后从一个元素连接到exit选择您要调用的方法的按钮。您可以在此处找到一个示例(我也更新了答案以包括该示例)
Alladinian 2012年

1
-1:很多单词,很少有用的信息。阅读并在我自己的应用程序中使用它之后,我写下了这个答案,希望它会更有用:stackoverflow.com/a/25829835/901641
ArtOfWarfare 2014年

1
这就是为什么我喜欢Apple不存在的文档。伙计,有人应该被解雇。
鸭子

@SpaceDog也许就是这样,他们都被解雇了,没有人可以写文档:/虽然我喜欢WWDC视频-2012年显然是苹果达到顶峰的一年。
turingtest

10

想象一下,您的故事板上有一系列视图:

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.
}

现在,在情节提要中,controlZ(例如,取消按钮)上的元素拖到ZExit。它将扫描视图层次结构中更高级别的所有视图,这些视图IBAction仅接受一个UIStoryboardSegue *作为动作,并列出它们供您选择。

希望这比现有的答案更直接,更有用。我发现此链接特别有用,因此,如果有一个细节在您阅读我的答案后仍然不清楚,那么也许可以为您提供帮助(我试图将这篇长文章中的所有有用信息浓缩为一个简短的答案): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html


4

另请参见无法连接情节提要板解散Segue,其中阐明了使“退出”图标生效的要求。在视图控制器层次结构中的较高位置,您必须具有以下方法:

  1. 标记为IBAction

  2. 接受一个参数,即UIStoryboardSegue *

如果同时满足这两个条件,则“退出”图标将看到它,并允许您通过从同一视图控制器中的按钮拖动来进行连接。

我现在还在这里发布了世界上最简单的示例:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard(固定于2013年7月12日)

这显示了现在呈现的视图控制器之间来回切换非常容易,这您之前为来回传递信息而必须做的所有工作相反(模板中包含委托和协议的内容) ,现在都可以将其删除)。


3

只是在需求定义中添加一些细微之处可能会有所帮助。这基于Xcode 4.6中的实验。我发现,只有通过方法的declaring(!)才能从Xcode启用所需的控件拖动响应。这是我发现的全部要求:

  • 标记为 IBAction
  • 接受一个为UIStoryboardSegue*的参数
  • 您必须声明一个动作(但不一定要实现[意味着.M实现部分中的方法])。
  • .M除appdelegate类外,它可以在任何类的接口声明中,甚至可以在的接口部分中。(我没有看到它在控制器层次结构中的位置有任何依赖性。您可以添加任何旧文件,并且系统似乎会聚合所有具有该UIStoryboardSegue参数的方法,并将它们显示在“退出”图标的菜单上。)请注意,按住Control键并拖动如果该方法属于您在情节提要编辑器中操作的场景的类中,则菜单甚至会向您显示您的方法,但该菜单将显示为无冒号,并且在运行时似乎不会触发任何操作。

例: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.