如何在转换UIViewController之间共享UIView(与addChildUsingController:)



假设在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。

因此,当您将视图添加到新创建的父视图控制器中时,它将从当前视图控制器的视图层次结构中删除。

我建议不要做这种事情。只需在两个地方创建视图的副本即可。如果使用大量数据,请在视图控制器之间共享数据(模型),而不是视图对象。

如果您完全设置了在视图控制器之间移动视图,我将在新的视图控制器中添加属性,并设置该属性,而不是操纵其他视图控制器的视图层次结构。返回当前视图控制器时,您还必须将视图传递回。

您应该将视图控制器的视图层次结构视为私有。不这样做违反了封装原则。

相关内容

  • 没有找到相关文章

最新更新