關于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。