之前在使用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就是切换视图控制器