102

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

我可以找到任何关于它的信息,也不知道如何使用它。它是如何工作的?

4

4 回答 4

72

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

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

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

您可以使用您的开发人员帐户详细信息登录 Apple 的 iOS 开发中心,然后转到WWDC 2012 视频页面并观看“在您的应用程序中采用故事板”(从顶部起第五个)关于 unwind segues 的讨论从 37:20 开始.


更新: 以下是 Apple 文档中有关该主题的更多信息

一个名为 Exit 的占位符对象,用于展开序列。默认情况下,当用户关闭子场景时,该场景的视图控制器会展开(或返回)到父场景——即最初转换到子场景的场景。但是,Exit 对象使视图控制器能够展开到任意场景。

(来自 iOS6 docset > General > Getting Started)

这是一个很好的例子,说明如何实现一个


另一个更新:

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

于 2012-09-17T14:37:19.177 回答
10

假设您的故事板中有一系列视图:

A -> ... -> Z

您希望在视图上有一个按钮Z,允许用户一直返回到A.

所以你需要做的是给出你想要一直返回的视图,在这种情况下A,一个实例方法被标记为 aIBAction并接受一个类型的参数UIStoryboardSegue *。方法和变量的名称无关紧要。您在实现中所做的事情也无关紧要。这是一个例子:

Obj-C:
A's 接口(不是Z's):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

A's 实现(不是Z's):

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

斯威夫特:
A's 源(不是Z's):

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

现在,在故事板中,从(IE,取消按钮)control上的元素拖动到's 。它将扫描视图层次结构中更高的所有视图,这些视图具有仅接受单个作为操作的视图,并列出它们以供您选择。ZZExitIBActionUIStoryboardSegue *

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

于 2014-09-14T03:37:15.440 回答
4

另请参阅Cannot Connect Storyboard Unwind Segue,它阐明了使退出图标栩栩如生的要求。在视图控制器层次结构中,您必须有一个方法,即:

  1. 标记为 IBAction

  2. 采用一个参数,即 UIStoryboardSegue*

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

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

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

这表明现在在呈现的视图控制器之间进行切换是多么容易,而不是您以前为了来回传递信息而必须做的所有工作(模板中带有委托和协议的东西,现在可以删除所有这些)。

于 2012-10-26T17:52:35.457 回答
3

只需在可能有帮助的需求定义中添加一点微妙之处。这是基于在 Xcode 4.6 中的实验。我发现它是专门且唯一的方法的声明(!),可以从 Xcode 启用所需的控制拖动响应。这是我发现的全部要求:

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

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

于 2013-03-18T00:41:41.180 回答