假设有一个viewControllerA,我们想在viewControllerA中添加viewControllerB,需要执行以下方法:
[viewControllerA addChildViewController:viewControllerB];
[viewControllerA.view addSubView:viewControllerB.view];
[viewControllerB didMoveToParentViewController:viewControllerA];
如果要在viewControllerA移除viewControllerB,需要执行以下方法:
[viewControllerB didMoveToParentViewController:nil];
[viewControllerB.view removeFromSuperView];
[viewControllerB removeFromParentViewController];
需要注意以下两个方法:
[viewControllerA addChildViewController:viewControllerB];
[viewControllerB didMoveToParentViewController:viewControllerA];
这两个方法能够保证事件能够正确地传递,如一些生命周期事件viewWillAppear等,如果不写这两个方法,UI上可能显示正常,但是可能会收不到一些事件,导致程序出现问题。
另外,UINavigationController及UITabViewController都是容器viewController,它们在管理子viewController的时候也是用的上面的方法,原理一样。
https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/