2012-09-13 134 views
101

我刚刚安装了Xcode 4.5 for iOS6支持,我在故事板中看到一个名为'Exit'的新图标,列在我的视图控制器和'First Responder'等下方。标记为“退出”的图标。Xcode 4.5故事板'退出'

我可以找到任何东西,也不知道如何使用它。

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

+1

在一个类似的问题,我张贴了这个答案: http://stackoverflow.com/questions/12569316/does-anyone-know-what-the-new-exit-icon-is-used-for-当编辑故事板 - usi/13437054#13437054 它有助于解释如何使用退出(展开)功能 – Eric

回答

72

这称为“展开塞格”。遗憾的是这个没有文档到目前为止,除了上了XCode 4.5新功能列表简单提一下,指出:

开卷塞格斯可以允许在故事板

可喜转变为场景 的现有实例是否有来自WWDC 2012解释这些生物(除其他之外)的会话。

您可以使用开发人员帐户详细信息登录Apple的iOS开发人员中心,然后转至WWDC 2012 videos page并观看“在应用程序中采用故事板”(它位于顶部第五位)关于unwind的讨论始于时间37: 20。


更新: 这里是从苹果的文档

是放松seques命名的退出占位符对象标的一些更多的信息。默认情况下,当用户关闭子场景时,该场景的视图控制器 展开(或返回)到父场景 - 即 最初转换到子场景的场景。但是,退出对象 可使视图控制器放松到任意场景。

(从iOS6的文档集>常规>入门)

And here is a nice example of how you can implement one


另一个更新:

Here is a technical note from Apple关于这个话题。

+3

好吧,那么你如何使用它?尝试控制 - 点击从视图控制器底部的退出对象,但它不会链接到任何东西。 – shim

+4

你基本上必须为你的展开顺序定义一个方法,然后从一个元素连接到'exit'按钮,选择你想调用的方法。你可以在这里找到一个例子(http://www.techotopia.com/index.php/Using_Xcode_Storyboarding_(iOS_6)#Unwinding_Storyboard_Segues)(我已经更新了我的答案以及包括这个例子) – Alladinian

+1

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

4

另请参阅Cannot Connect Storyboard Unwind Segue其中阐明了使Exit图标生效的要求。你必须有,在视图控制器层次更高了,一个方法,那就是:

  1. 标记为IBAction为

  2. 需要指定一个参数是一个UIStoryboardSegue *

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

我现在也张贴在这里是世界上最简单的例子:

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

这表明现在是怎样十分容易从呈现的视图控制器原因请看和背部,而不是你以前为了来回传递信息所做的所有工作(模板中的代码和协议,现在可以删除所有这些内容)。

3

只需在需求定义中添加一些细微的内容即可。这是基于Xcode 4.6的实验。我发现它只是声明(!)的方法,使Xcode能够实现所需的控制拖动响应。这是我发现的所有要求:

  • 标记为IBAction
  • 需要指定一个参数是一个UIStoryboardSegue *
  • 你必须有一个动作声明(但不一定实现[指在一个方法.M实施部分])。
  • 它可以在任何类的接口声明中,即使是除了appdelegate类之外的.M的接口部分。 (我没有看到它在控制器层次结构中的位置的任何依赖关系,你可以添加任何旧文件,系统似乎汇集了所有具有UIStoryboardSegue参数的方法,并将它们显示在Exit图标的菜单上。)注意,如果该方法在故事板编辑器中正在操作的场景的类中,则拖动菜单甚至会向您显示您的方法,但它将显示为不带冒号,并且在运行时似乎不会触发任何操作。

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

10

想象一下,你有意见,你的故事板序列:

A -> ... -> Z

你想有观点Z一个按钮,允许用户将全力以赴回到A的方式。

所以,你需要做的就是给你要一路背出来,在这种情况下,A,其中被标记为IBAction,并采取了UIStoryboardSegue *类型的单个参数的实例方法的看法。方法和变量的名称无关紧要。你在实施过程中所做的事情也无关紧要。下面是一个例子:

的OBJ-C:
A的接口(未Z'S):

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

A的实施(未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. 
} 

Swift:
In 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内(即,取消按钮)ZExit。它将扫描视图层次结构中所有视图中具有IBAction的所有视图,该视图只接受一个UIStoryboardSegue *作为操作并列出供您选择。

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