美文网首页
Custom Container View Controller

Custom Container View Controller

作者: 小嘎aa | 来源:发表于2018-10-02 09:09 被阅读0次

    (参考:https://www.jianshu.com/p/f82da0662c8a
    https://www.jianshu.com/p/7587cce3ede0

    Container View Controller 容器视图控制器

    定义:在一个 View Controller 中包含多个 View Controller 时,那么这个 View Controller 就是一个 Container View Controller

    作用:通过 Container 来对 View Controller 上的 controllers 的生命周期进行管理以及旋转相关的处理。

    实现容器视图控制器的主要方法

    - (void)addChildViewController:(UIViewController *)childController
    - (void)removeFromParentViewController
    - (void)willMoveToParentViewController:(UIViewController *)parent
    - (void)didMoveToParentViewController:(UIViewController *)parent
    - (void)transitionFromViewController...
    
    • addChildViewController
      向父VC中添加子VC,添加之后自动调用willMoveToParentViewController: superVC
      但需要显示调用didMoveToParentViewController告诉编译器已经完成添加。
      实际用例:
    [superVC addChildViewController:subVC]; 
    [superVC.view addSubview: subVC.view];  
    [subVC didMoveToParentViewController: superVC];
    
    • removeFromParentViewController
      将子VC从父VC中移除,需要在移除之前显示调用willMoveToParentViewController,传入参数nil;
      移除之后自动调用didMoveToParentViewController: nil
      实际用例:
    [subVC willMoveToParentViewController:nil]; // 删除前通知
    [subVC.view removeFromSuperview]; 
    [subVC removeFromParentViewController];
    
    • willMoveToParentViewController
      从父VC中添加或删除子VC时调用。当向父VC添加子VC之后,该方法会自动调用。若要从父VC移除子VC,需要在移除之前调用该方法,传入参数nil。

    • didMoveToParentViewController
      从父VC中添加或删除子VC后调用。
      当向父VC添加子VC之后,该方法不会被自动调用,需要显示调用告诉编译器已经完成添加(事实上不调用该方法也不会有问题,不太明白);
      从父VC移除子VC之后,该方法会自动调用,传入的参数为nil,所以不需要显示调用。

    • transitionFromViewController

    要想切换子视图控制器a/b, a/b必须均已添加到父视图控制器中,不然会报错

    在调用这个方法之前先调用
    [fromViewController willMoveToParentViewController: nil];
    在completion后 ,调用[toViewController didMoveToParentViewController:self];

    相关文章

      网友评论

          本文标题:Custom Container View Controller

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