首页 文章

Xcode 4.5故事板'Exit'

提问于
浏览
102

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

我可以在它上面找到任何东西,也不知道如何使用它 .

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

4 回答

  • 4

    这被称为“ Unwind Segue ” . 遗憾的是,到目前为止,除了简要提及XCode 4.5新功能列表之外,目前还没有这方面的文档说明:

    展开segue可以允许转换到故事板中现有的场景实例

    好消息是WWDC 2012有一个 Session 解释这些生物(以及其他内容) .

    您可以使用您的开发者帐户详细信息登录Apple的iOS开发人员中心,然后转到WWDC 2012 videos page并观看"Adopting Storyboard in your App"(从顶部开始的第五个)关于展开细分的讨论从时间37:20开始 .


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

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

    (来自iOS6 docset>常规>入门)

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


    Another Update:

    Here is a technical note from Apple关于这个主题 .

  • 72

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

    A -> ... -> Z

    你想在视图 Z 上有一个按钮,允许用户一直回到 A .

    所以你需要做的是给你想要一直支持的视图,在这种情况下, A ,一个标记为 IBAction 的实例方法,并接受一个类型为 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.
    }
    

    现在,在您的故事板中,控制从 Z (IE,取消按钮)上的元素拖动到 ZExit . 它将扫描视图层次结构中较高的所有视图,其中 IBAction 仅接受单个 UIStoryboardSegue * 作为操作并列出它们供您选择 .

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

  • 3

    另请参阅Cannot Connect Storyboard Unwind Segue,其中阐明了使“退出”图标生效的要求 . 您必须在视图控制器层次结构中具有以下方法:

    • 标记为IBAction

    • 采用一个参数UIStoryboardSegue *

    如果满足这两个条件,则退出图标将显示它,并允许您通过控制拖动来连接到同一视图控制器中的按钮 .

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

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

    这显示了现在如何轻松地从呈现的视图控制器中进行切换和返回,而不是之前为了交换信息而必须执行的所有工作(模板中的代理和协议的内容) ,所有这些现在都可以删除) .

  • 10

    只需在需求定义中添加一些可能有用的细微内容 . 这是基于在Xcode 4.6中进行的实验 . 我发现它是特定的,并且只有方法的声明(!)才能从Xcode启用所需的控制拖动响应 . 以下是我发现的全部要求:

    • 标记为 IBAction

    • 采用一个参数 UIStoryboardSegue *

    • 您必须声明一个动作(但不一定实现[表示 .M 实现部分中的方法]) .

    • 它可以在任何类的接口声明中,甚至是 .M 的接口部分,除了appdelegate类 . (我没有看到它在控制器层次结构中的位置有任何依赖 . 你可以添加任何旧文件,系统似乎聚合所有具有 UIStoryboardSegue 参数的方法,并在Exit图标的菜单上显示它们 . )请注意,如果方法位于您在storyboard编辑器中操作的场景类中,则控制拖动菜单甚至会显示您的方法,但它将显示没有冒号,并且似乎在运行时不会触发任何操作 .

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

相关问题