我刚刚安装了支持 iOS6 的 Xcode 4.5,我在我的 Storyboard 中看到了一个名为“Exit”的新图标,它与“First Responder”等一起列在我的视图控制器下。一个标有“Exit”的绿色小图标。
我可以找到任何关于它的信息,也不知道如何使用它。它是如何工作的?
我刚刚安装了支持 iOS6 的 Xcode 4.5,我在我的 Storyboard 中看到了一个名为“Exit”的新图标,它与“First Responder”等一起列在我的视图控制器下。一个标有“Exit”的绿色小图标。
我可以找到任何关于它的信息,也不知道如何使用它。它是如何工作的?
这被称为“ Unwind Segue ”。不幸的是,到目前为止,除了 XCode 4.5 新功能列表中的简短提及外,没有任何文档说明:
展开转场可以允许过渡到情节提要中的现有场景实例
好消息是 WWDC 2012 有一个会议解释了这些生物(除其他外)。
您可以使用您的开发人员帐户详细信息登录 Apple 的 iOS 开发中心,然后转到WWDC 2012 视频页面并观看“在您的应用程序中采用故事板”(从顶部起第五个)关于 unwind segues 的讨论从 37:20 开始.
更新: 以下是 Apple 文档中有关该主题的更多信息
一个名为 Exit 的占位符对象,用于展开序列。默认情况下,当用户关闭子场景时,该场景的视图控制器会展开(或返回)到父场景——即最初转换到子场景的场景。但是,Exit 对象使视图控制器能够展开到任意场景。
(来自 iOS6 docset > General > Getting Started)
这是一个很好的例子,说明如何实现一个
另一个更新:
这是 Apple关于此主题的技术说明。
假设您的故事板中有一系列视图:
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 。它将扫描视图层次结构中更高的所有视图,这些视图具有仅接受单个作为操作的视图,并列出它们以供您选择。Z
Z
Exit
IBAction
UIStoryboardSegue *
希望这比现有答案更直接和更有帮助。我发现此链接特别有用,因此,如果您在阅读我的答案后仍然不清楚某个细节,也许这可以帮助您(我试图将这篇长文中的所有有用信息浓缩成一个简短的答案): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html
另请参阅Cannot Connect Storyboard Unwind Segue,它阐明了使退出图标栩栩如生的要求。在视图控制器层次结构中,您必须有一个方法,即:
标记为 IBAction
采用一个参数,即 UIStoryboardSegue*
如果满足这两个条件,Exit 图标将看到它,并允许您通过从同一视图控制器中的按钮拖动来连接到它。
我现在还在这里发布了世界上最简单的示例:
https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard(2013年 7 月 12 日修复)
这表明现在在呈现的视图控制器之间进行切换是多么容易,而不是您以前为了来回传递信息而必须做的所有工作(模板中带有委托和协议的东西),现在可以删除所有这些)。
只需在可能有帮助的需求定义中添加一点微妙之处。这是基于在 Xcode 4.6 中的实验。我发现它是专门且唯一的方法的声明(!),可以从 Xcode 启用所需的控制拖动响应。这是我发现的全部要求:
IBAction
UIStoryboardSegue
*.M
实现部分中的方法])。.M
,除了 appdelegate 类。(我没有看到它在控制器层次结构中的位置有任何依赖性。您可以添加任何旧文件,系统似乎聚合了所有具有UIStoryboardSegue
参数的方法并将它们显示在退出图标的菜单上。)请注意,控制拖动如果方法在情节提要编辑器中操作的场景的类中,菜单甚至会向您显示您的方法,但它会出现没有冒号并且似乎不会在运行时触发任何动作。例子:
-(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;