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。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容