UIViewController子控制器管理

作者: Mr_GaoYu | 来源:发表于2016-07-03 18:51 被阅读1637次
    UIViewController的控制器管理:

    iOS5以后,苹果新的API增加了addChildViewController方法,建议在addSubview的同时调用addChildViewController方法将子页面对应的控制器也加到当前ViewController的管理中。对于那些当前暂时不需要显示的subview,只通过addChildViewController把Controller加进去。需要显示时再调用transitionFromViewController方法。

    另外,当收到系统的 Memory Warning 的时候,系统也会自动把当前没有显示的 subview unload 掉,以节省内存。

    • 添加控制器过程:

      //addChildViewController将viewController加入到self的childViewControllers数组里面。
      [self addChildViewController:viewController];
      //将viewController的view定制frame之后加入到self.view上。
      viewController.view.frame = self.view.bounds;
      [self.view addSubview:viewController.view];
      //将self作为参数发送消息给viewController。子控制器的添加结束,生命周期将会正常随父控制器调用。
      [viewController didMoveToParentViewController:self];
      

      注意:child controller的view可以加入到parent controller的view上或者其任意subview上。但不可以加入到以外的view上;在addChildViewController:方法中将自动帮你调用willMoveToParentViewController:,不要再显示调用。只需在结束时调用didMoveToParentViewController:即可。

    • 移除控制器过程:

       //发送消息给self(child controller),将要从parent controller上移除。参数必须是nil
       [self willMoveToParentViewController:nil];
       //移除view
        [self.view removeFromSuperview];
       //从parent controller的childControllers数组中移除
       [self removeFromParentViewController];
      

    注意:在removeFromParentViewController中将自动帮你调用didMoveToParentViewController:方法。不要再显示调用。

    • 切换控制器过程:
      [fromViewController willMoveToParentViewController:nil];
      [self addChildViewController:toViewController];
      __weak typeof(self) weakSelf = self;
      [self transitionFromViewController:fromViewController
      toViewController:toViewController
      duration:duration
      options:options
      animations:animations
      completion:^(BOOL finished)
      {
      [fromViewController removeFromParentViewController];
      [toViewController didMoveToParentViewController:weakSelf];
      if (completion) {
      completion(finished);
      }
      }];

    注意:这个方法为两个页面切换提供了animation定制,这个可以方便在非交互情况下的切换时提供了一种动画解决方案;要切换的页面要先addChildViewController:到parent controller上。

    相关文章

      网友评论

      • 乆丩乣::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye:
        小小Q吖:哈哈 满分
        乆丩乣:@乆_丩 :smile:
        code_间特门:@乆_丩 大哥换个头像吧,每次看到你总有莫名其妙的恐惧感 :scream: ,在加上你评论中的表情,我真的被你给吓到了 :sob:

      本文标题:UIViewController子控制器管理

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