- (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.
}
现在,在您的故事板中,控制从 Z (IE,取消按钮)上的元素拖动到 Z 的 Exit . 它将扫描视图层次结构中较高的所有视图,其中 IBAction 仅接受单个 UIStoryboardSegue * 作为操作并列出它们供您选择 .
4 回答
这被称为“ Unwind Segue ” . 遗憾的是,到目前为止,除了简要提及XCode 4.5新功能列表之外,目前还没有这方面的文档说明:
好消息是WWDC 2012有一个 Session 解释这些生物(以及其他内容) .
您可以使用您的开发者帐户详细信息登录Apple的iOS开发人员中心,然后转到WWDC 2012 videos page并观看"Adopting Storyboard in your App"(从顶部开始的第五个)关于展开细分的讨论从时间37:20开始 .
Update: 以下是Apple的文档中有关该主题的更多信息
(来自iOS6 docset>常规>入门)
And here is a nice example of how you can implement one
Another Update:
Here is a technical note from Apple关于这个主题 .
想象一下,您的故事板中有一系列视图:
A -> ... -> Z
你想在视图
Z
上有一个按钮,允许用户一直回到A
.所以你需要做的是给你想要一直支持的视图,在这种情况下,
A
,一个标记为IBAction
的实例方法,并接受一个类型为UIStoryboardSegue *
的参数 . 方法和变量的名称也很重要 . 这是一个例子:Obj-C:
在
A
的界面(不是Z
):在
A
的实施中(不是Z
):Swift:
在
A
的来源(不是Z
):现在,在您的故事板中,控制从
Z
(IE,取消按钮)上的元素拖动到Z
的Exit
. 它将扫描视图层次结构中较高的所有视图,其中IBAction
仅接受单个UIStoryboardSegue *
作为操作并列出它们供您选择 .希望这比现有答案更直接,更有帮助 . 我发现这个链接特别有用,所以如果在阅读我的答案之后仍然模糊不清,也许这可以帮到你(我试着将这篇长篇文章中的所有有用信息压缩成一个简短的答案):http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html
另请参阅Cannot Connect Storyboard Unwind Segue,其中阐明了使“退出”图标生效的要求 . 您必须在视图控制器层次结构中具有以下方法:
标记为IBAction
采用一个参数UIStoryboardSegue *
如果满足这两个条件,则退出图标将显示它,并允许您通过控制拖动来连接到同一视图控制器中的按钮 .
我现在也在这里发布了世界上最简单的例子:
https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard(2013年7月12日修复)
这显示了现在如何轻松地从呈现的视图控制器中进行切换和返回,而不是之前为了交换信息而必须执行的所有工作(模板中的代理和协议的内容) ,所有这些现在都可以删除) .
只需在需求定义中添加一些可能有用的细微内容 . 这是基于在Xcode 4.6中进行的实验 . 我发现它是特定的,并且只有方法的声明(!)才能从Xcode启用所需的控制拖动响应 . 以下是我发现的全部要求:
标记为
IBAction
采用一个参数
UIStoryboardSegue
*您必须声明一个动作(但不一定实现[表示
.M
实现部分中的方法]) .它可以在任何类的接口声明中,甚至是
.M
的接口部分,除了appdelegate类 . (我没有看到它在控制器层次结构中的位置有任何依赖 . 你可以添加任何旧文件,系统似乎聚合所有具有UIStoryboardSegue
参数的方法,并在Exit图标的菜单上显示它们 . )请注意,如果方法位于您在storyboard编辑器中操作的场景类中,则控制拖动菜单甚至会显示您的方法,但它将显示没有冒号,并且似乎在运行时不会触发任何操作 .示例:
-(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;