【问题标题】:How can I use an Embed Segue in iOS 5?如何在 iOS 5 中使用 Embed Segue?
【发布时间】:2013-01-20 20:07:48
【问题描述】:

iOS 6 引入了 Embed Segue,允许在 Storyboard 中使用自定义容器控制器。反正有没有为 iOS 5 复制这个?

【问题讨论】:

    标签: ios objective-c uistoryboard uistoryboardsegue


    【解决方案1】:

    这里的挑战是子视图控制器的视图通常被添加为父视图控制器的某些容器视图的子视图。由于您不能从随机的UIView 控件中获得转场,因此无法从UIView 容器视图创建转场到孩子的场景。因此,您只需要自己编写代码。

    幸运的是,这只是 View Controller Programming Guide 中 Adding a Child Controller 中引用的那四行代码。 就我个人而言,我什至可能会稍微修改该代码,在我的视图控制器:

    - (void) displayChildController:(UIViewController*)childController
                    inContainerView:(UIView *)containerView
    {
       [self addChildViewController:childController];                 // 1
       childController.view.frame = containerView.bounds;             // 2
       [containerView addSubview:childController.view];
       [childController didMoveToParentViewController:self];          // 3
    }
    

    不过,我已经完成了自定义 segues 以将活动子控制器从一个场景更改为下一个场景,但它本质上只是上述参考文档中稍后列出的代码的一种变体。但这不是嵌入 segue 问题,所以这里不相关

    【讨论】:

    • 如何在仍然使用 iOS 6 容器视图的同时做到这一点?我原以为 segue 会失败,但苹果在实例化 UIViewController 时会硬崩溃。 (来自 Apple 的严重黑客行为?我很惊讶他们在这里能想出的最好的东西是不兼容的、破坏应用程序的“嵌入 segue”:()
    • @Adam 让我们将其移至聊天:chat.stackoverflow.com/rooms/36209/…
    【解决方案2】:

    我通过继承 UIStoryboardSegue 来复制功能。

    在 Interface Builder 中,我创建了一个自定义 segue 并将其类设置为我的子类 (QCEmbedSegue)。在我的父视图控制器的viewDidLoad 中,我调用performSegueWithIdentifier:sender

    QCEmbedSegue 只是覆盖perform

    - (void)perform
    {
        [self.sourceViewController addChildViewController:self.destinationViewController];
        [[self.sourceViewController view] addSubview:[self.destinationViewController view]];
        [self.destinationViewController didMoveToParentViewController:self.sourceViewController];
    }
    

    http://www.quentamia.com/blog/embed-segue-in-ios-5/

    【讨论】:

    • 不用说,只有将子场景添加到父控制器的顶层视图时才能正常工作。但这是一次崇高的尝试。
    • @Rob 非常正确。在我的情况下,这就是我所需要的。它可以建立在允许插入视图层次结构中的任何位置。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多