我想使用容器视图来启动另一个视图控制器,但我看不到任何有关如何以编程方式分配它的信息。我可以从用户界面中做到这一点,但如果我想用 coes 创建一个,并将其链接到 UIviewController,我该怎么做?它的行为像普通的 UIview 吗?
问问题
3509 次
2 回答
11
如果我遵循您的问题,您是在询问如何在代码中使用视图控制器包含。我建议查看View Controller Programming Guide的Creating Custom Container View Controllers部分,它向您展示了执行此操作的代码,包括添加子视图控制器:
[self addChildViewController:content]; // 1
content.view.frame = [self frameForContentController]; // 2
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self]; // 3
当使用子视图控制器(至少不占据整个屏幕的)时,UIView
在父视图控制器的视图上有一个很有用的,它指示子视图控制器的边界。它极大地简化了一堆任务。在上面的代码片段中,他们假设子视图被调用frameForContentController
。
或删除一个(在此代码段中,content
是UIViewController *
引用要删除的子控制器的那个):
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
如果你想用另一个子控制器替换一个子控制器:
- (void) cycleFromViewController: (UIViewController*) oldC
toViewController: (UIViewController*) newC
{
[oldC willMoveToParentViewController:nil]; // 1
[self addChildViewController:newC];
newC.view.frame = [self newViewStartFrame]; // 2
CGRect endFrame = [self oldViewEndFrame];
[self transitionFromViewController: oldC toViewController: newC // 3
duration: 0.25 options:0
animations:^{
newC.view.frame = oldC.view.frame; // 4
oldC.view.frame = endFrame;
}
completion:^(BOOL finished) {
[oldC removeFromParentViewController]; // 5
[newC didMoveToParentViewController:self];
}];
}
我还建议查看WWDC 2011 - Implementing UIViewController Containment。
于 2012-12-23T19:39:57.563 回答
0
只需使用父 VC 拥有的普通 UIView 即可。创建一个子 VC 并在 VC 的帮助下将其添加到父 VC addChildViewController:
,然后将子 VC 的视图作为子视图添加到容器视图 -addSubview:
在 VC 的viewDidLoad
方法中。
于 2012-12-23T19:47:11.027 回答