【发布时间】:2013-01-20 20:07:48
【问题描述】:
iOS 6 引入了 Embed Segue,允许在 Storyboard 中使用自定义容器控制器。反正有没有为 iOS 5 复制这个?
【问题讨论】:
标签: ios objective-c uistoryboard uistoryboardsegue
iOS 6 引入了 Embed Segue,允许在 Storyboard 中使用自定义容器控制器。反正有没有为 iOS 5 复制这个?
【问题讨论】:
标签: ios objective-c uistoryboard uistoryboardsegue
这里的挑战是子视图控制器的视图通常被添加为父视图控制器的某些容器视图的子视图。由于您不能从随机的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 问题,所以这里不相关
【讨论】:
我通过继承 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];
}
【讨论】: