iOS父子控制器添加與移除

關于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
  1. 首先將VC添加到控制器上,建立父子關系,這時可以通過parentViewController訪問到父控制器;調用addChildViewController系統會自動調用willMoveToParentViewController:
  2. 將VC控制器的view添加到父控制器上。
  3. 調用VC的didMoveToParentViewController通知VC完成了父子關系建立。
  • ViewController 移除子控制器方法removeFromParentViewController 代碼如下
    [VC willMoveToParentViewController:nil]; //1
    [VC.view removeFromSuperview]; //2
    [VC removeFromParentViewController]; //3
  1. 通知子控制器即將解除父子關系
  2. 將VC的view從父控制器移除
  3. 通過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。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容