关于addChildViewConroller的相关问题。
- ViewController 添加子控制的方法为addChildViewController 来一段代码实例
ExampleController *VC = [[ExampleController alloc]init];
VC.view.frame = self.view.bounds;
[self addChildViewController:VC];//1
[self.view addSubview:VC.view];//2
[VC didMoveToParentViewController:self];//3
- 首先将VC添加到控制器上,建立父子关系,这时可以通过
parentViewController
访问到父控制器;调用addChildViewController
系统会自动调用willMoveToParentViewController:
。 - 将VC控制器的view添加到父控制器上。
- 调用VC的
didMoveToParentViewController
通知VC完成了父子关系建立。
- ViewController 移除子控制器方法removeFromParentViewController 代码如下
[VC willMoveToParentViewController:nil]; //1
[VC.view removeFromSuperview]; //2
[VC removeFromParentViewController]; //3
- 通知子控制器即将解除父子关系
- 将VC的view从父控制器移除
- 通过
removeFromParentViewController
真正解除父子关系,并且系统会调用didMoveToParentViewController:
。
方法说明
automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers = false,那么系统不会自动管理子视图控制器的生命周期
使用beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated和endAppearanceTransition来处理。
- Controller里面的viewWillAppear:(BOOL)animated在subview真正加到父view之前调用。
- Controller里面的viewDidAppear:(BOOL)animated在真正被add到父view之后调用。
- Controller里面的ViewWillDisappear:(BOOL)animated在subview从父view移除前调用。
- Controller里面的ViewWillDidDisappear:(BOOL)animated在removeFromSuperview之后调用。
[VC beginAppearanceTransition:YES animated:YES]触发towCol的viewWillAppear。
[VC endAppearanceTransition]触发viewDidAppear。
[VC beginAppearanceTransition:NO animated:YES]触发towCol的viewWillDisappear。
[VC endAppearanceTransition]触发viewDidDisappear。