ios - 我应该如何在 xcode Storyboard中链接 View Controller ?

标签 ios uiviewcontroller xcode4.5 uistoryboard uistoryboardsegue

我想在 xcode Storyboard中链接 View Controller 以实现以下效果:

A -> B -> C -> D -> E -> B -> C -> D -> E -> B -> ...

其中上面的字母代表单独的 View Controller (全尺寸场景)。当我在 View 之间移动时,我希望有一个从右到左的水平滑动segue,并且我不希望或不需要保留先前 View 的状态(即没有推送或模态segue)。不过,我确实需要在 View 之间传输一些状态。

关于如何使用 Storyboard编辑器、代码或两者的某种组合来最好地实现这一目标,有什么建议吗?

最佳答案

我突然想到了几个选择:

  1. 与旧版本 iOS 具有最大向后兼容性的最简单解决方案是使用导航 Controller ,保留对 View Controller B 的引用。某个地方,然后你就可以,在 E ,有一些IBAction这样做:

    [self.navigationController popToViewController:B animated:YES];
    

    在此模型中,除了 E 中的一个之外,所有的 Segue 都将在 Storyboard 中呈现。至B ,您可以在 IBAction 中使用上述代码(或其他)。

  2. 如果您可以放弃 iOS 5 兼容性,您也可以使用 unwind继续。在这种情况下,所有的转场都将在 Storyboard中呈现。但我们中的许多人还不愿意放弃 iOS 5 兼容性,所以也许您不想考虑这个解决方案。但如果您确实想使用展开转场,则只需在 B 中定义展开操作即可。 ,如:

    - (IBAction)backToB:(UIStoryboardSegue *)segue
    {
        // if you need to do any UI update because we got an unwind segue
        // back to this controller, do that here
    }
    

    一旦您在 B 中执行了此展开操作, ,你会突然有一个新的 segue 类型,名为 backToB (不过,我建议你给它一个更好的名字)在IB中呈现给你,你可以使用它从E开始至B 。显然,所有其他推送转场都会像往常一样出现在故事​​板中。

  3. 如果您确实不想使用导航 Controller ,但不需要 iOS 4 兼容性,您也可以通过 View Controller 包含来实现此目的,其中您有一个父自定义容器 Controller ParentVC ,和A通过E将是子 Controller 。然后,您可以使用自定义 Segues 在子 Controller 序列中进行转换。

  4. 最终的一个变体可能如下:

    BABCDE

    在这种情况下,与选项 1 一样,您只是使用导航 Controller ,当 B 时首次加载时,它将以编程方式立即在 viewDidLoad 中执行以下操作

    [self presentViewController:A animated:NO];
    

    虽然B是 Root View Controller ,感觉就像 A曾是。当A完成后它会返回 B ,此时您可以执行您的标准 B -C -D -E插入segue进度,但因为我们做了B根 Controller ,E可以做popToRootViewControllerAnimated返回B ,并且您无需担心保留指向 B 的指针大约。如果A,这个模型就很有意义。是登录 Controller 或启动屏幕,或者有些不正常流程的东西。

其中,1 可能是最简单的,2 可能被认为是最优雅的(尽管您失去了 iOS 5 和更早的支持),如果您不介意编写更多(有些复杂)代码和内存,则 3 是一个选项使用至关重要,4 与 1 一样非常简单,但这只是流程对您的应用程序是否有意义的问题。就我个人而言,我倾向于选项 1 或 4,具体取决于 View Controller A曾是。如果需要兼容 iOS 4,这两个选项也适用于 NIB。

关于ios - 我应该如何在 xcode Storyboard中链接 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465861/

相关文章:

javascript - 用于深度链接的移动 Safari 页面卸载/隐藏/模糊

objective-c - 在显示 UIWebView 的父 ViewController 之前渲染它

ios - 在 UITabBar 的每个 UINavigationController 中重新加载所有 UIViewController

ios - xCode 4.5 git merge 无法提交或报错

ios - 在当前区域的 map 上显示图钉

ios - 将复杂的 NSObject 序列化为 JSON 模式

ios - 在 Facebook 视频 IOS 中标记 friend

ios - Swift 动态原型(prototype)单元上多个部分的独特选择

uiviewcontroller - 为什么 NavigationLink 按钮在自定义 UIViewControllerRepresentable 包装器中显示为 "disabled"

objective-c - 如何通过仅更改高度而不更改宽度来调整 UILabel 的大小?