如何在iOS 5中使用Embed Segue?

Que*_*mia 5 objective-c ios uistoryboard uistoryboardsegue

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

Rob*_*Rob 9

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

幸运的是,它只是从View Controller Programming Guide添加子控制器引用的那四行代码.就个人而言,我甚至可能会略微修改该代码,在我的视图控制器中定义了以下方法:

- (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
}
Run Code Online (Sandbox Code Playgroud)

但是,我已经完成了自定义segue,用于将活动子控制器从一个场景更改为下一个场景,但它基本上只是上面引用文档中后面列出的代码的变体.但这不是一个嵌入式的问题,因此这里没有相关性


Que*_*mia -1

我通过子类化 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];
}
Run Code Online (Sandbox Code Playgroud)

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