假设在ViewControllerA
中的UIButton
的点击中,以下是在过渡到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:
方法,所以我不知道这是否可以预期,但是我希望能够使用_banner
返回CC_11。
我需要保留它吗?
一个视图只能属于单个监督。引用苹果的文档:
视图只能具有一个监督。如果查看已经有一个监督,并且 该视图不是接收器,此方法删除了先前的 在进行接收器的新监督之前,SupperTiew。
因此,当您将视图添加到新创建的父视图控制器中时,它将从当前视图控制器的视图层次结构中删除。
我建议不要做这种事情。只需在两个地方创建视图的副本即可。如果使用大量数据,请在视图控制器之间共享数据(模型),而不是视图对象。
如果您完全设置了在视图控制器之间移动视图,我将在新的视图控制器中添加属性,并设置该属性,而不是操纵其他视图控制器的视图层次结构。返回当前视图控制器时,您还必须将视图传递回。
您应该将视图控制器的视图层次结构视为私有。不这样做违反了封装原则。