我有一个父UIViewController
,可以加载两个不同的孩子UIViewControllers
, A 和 B 。要加载 A ,我会:
[self addChildViewController:A];
[self.container addSubview:A.view];
[A didMoveToParentViewController:self];
然后当我想添加 B 时,我会使用相同的代码。我的问题是如何删除 A. 这就是我需要的全部内容:
[A removeFromParentViewController];
还是我还需要添加[A.view removeFromSuperview];
?
答案 0 :(得分:1)
如果您尝试在控制器a和b之间切换,那么您还需要使用此类代码,或类似的代码,在apple docs here
上找到- (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];
}];
}
答案 1 :(得分:0)
在最简单的情况下,将子项添加到容器控制器需要三个步骤:
在父项上调用addChildViewController:并将子项作为参数传递(例如,[self addChildViewController:childvc])。
将子控制器的视图添加为子视图(例如,[self.view addSubview:childvc.view])。
调用didMoveToParentViewController:在父项为其参数的子项上(例如,[childvc didMoveToParentViewController:self])。
要删除子视图控制器,步骤几乎(但不完全)镜像:
调用willMoveToParentViewController:在子节点上,传递nil作为参数(例如,[childvc willMoveToParentViewController:nil])。
删除子控制器的视图(例如,[childvc.view removeFromSuperview])。
在子项上调用removeFromParentViewController(例如,[childvc removeFromParentViewController])。