让我们说,在转换到UIButton
之前,ViewControllerA
ViewControllerB
发生了以下情况:
- (IBAction)levelSelectButton:(id)sender {
ViewControllerB* obj = [[ViewControllerB alloc] init];
[self addChildViewController:obj];
CGSize screenSize = [MainScreen screen];
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;
obj.view.frame = CGRectMake(0,0,screenWidth,screenHeight);
[obj.view addSubview:_banner];
//[obj didMoveToParentViewController:self];
[self runPushAnimationWithController:obj];
}
当ViewControllerB
显示时,我可以看到我的_banner
(GADBannerView
对象)视图,但当我返回ViewControllerA
时,它已不再存在。
我之前从未使用过addChildViewController:
/ didMoveToParentViewController:
方法,因此我不知道这是否是预期的,但我希望能够ViewControllerA
返回_banner
1}}仍然可见。
我需要保留吗?
答案 0 :(得分:0)
视图只能属于单个超级视图。引用Apple的文档:
视图只能有一个超级视图。如果视图已经有超视图和 该视图不是接收者,此方法删除了以前的 在使接收器成为新的超级视图之前的超视图。
因此,当您将视图添加到新创建的父视图控制器时,它将从当前视图控制器的视图层次结构中删除。
我建议不要这样做。只需在两个位置创建视图的副本。如果它使用大量数据,则在视图控制器之间共享数据(模型),而不是视图对象。
如果完全设置在视图控制器之间移动视图,我会向新视图控制器添加属性并设置该属性,而不是操纵其他视图控制器的视图层次结构。当您返回当前视图控制器时,您还必须传递视图BACK。
您应该将视图控制器的视图层次结构视为私有。不这样做违反了封装原则。