iOS父子控制器添加与移除

作者: 蠢萌的L君 | 来源:发表于2017-07-26 17:39 被阅读1434次

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

相关文章

网友评论

    本文标题:iOS父子控制器添加与移除

    本文链接:https://www.haomeiwen.com/subject/caeokxtx.html