理解addchildviewcontroller

作者: BairdWeng | 来源:发表于2016-02-15 12:30 被阅读3619次

       之前在使用ViewController的时候需要增加View层总是使用addsubView添加N个View,但是这些View有时候不需要全部用到,如果有由视图控制器来管理,在需要的时候显示,不需要的时候释放掉以此来节省内存。而且还有一个好处就是切换视图控制器的时候可以更加自由地定义动画以及定义子视图控制器的大小。 

    在VC中直接使用addSubView虽热可以减少VC的耦合性,但是会带来其它更加严重的问题。

[self.view addSubView:self.vc.view];

直接add进去的SubView不在ViewController的view hierarchy内,事件没法正常传递,而且违背了CocoaTouch开发的设计MVC原则,ViewController应该且只应该管理一个view hierarchy.

所以应当使用addchildviewcontroller

//为视图控制器添加子视图控制器

[self addChildViewController:newVC];

//将子视图控制器的View添加到主视图控制器。

[self.view addSubview:newVC.view];

####注意点

在调用[父视图控制器 addChildViewController:子视图控制器]之前,无需显式调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法,因为已经默认调用了。

在调用[父视图控制器 addChildViewController:子视图控制器]之后,要仅接着调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。

在调用[子视图控制器 removeFromParentViewController]之前,必须先调用[子视图控制器 willMoveToParentViewController:nil]。

在调用[子视图控制器 removeFromParentViewController]之后,无需显式调用[子视图控制器didMoveToParentViewController:父视图控制器],因为已经默认调用了。

在调用transitionFromViewController之前,调用[fromController willMoveToParentViewController:nil]。

在调用transitionFromViewController之后,调用[toController didMoveToParentViewController:父视图控制器]。

还有一个api就是切换视图控制器

相关文章

网友评论

  • cottonBuddha:请问 直接add进去的SubView不在ViewController的view hierarchy内,事件没法正常传递 这怎么理解呢
    朝雨晚风:如你没有强持有这个被addsubview的控制器的作为全局属性就会这样,因为你加addsubview之后,改控制器被释放了
  • Jabir_Zhang:注意点写的很棒,谢谢
  • 倒骑毛驴看风月:可否下个像网易新闻那样的demo。简单点的,就利用addchildvc这个方法,其他子控制器里面有tableview或者collectionview,谢谢!

本文标题:理解addchildviewcontroller

本文链接:https://www.haomeiwen.com/subject/kprpkttx.html