zoukankan      html  css  js  c++  java
  • IOS—通过ChildViewController实现view的切换

    IOS—通过ChildViewController实现view的切换

    在以前,一个UIViewController的View可能有很多小的子view。这些子view很多时候被盖在最后,我们在最外层ViewController的viewDidLoad方法中,用addSubview增加了大量的子view。这些子view大多数不会一直处于界面上,只是在某些情况下才会出现,例如登陆失败的提示view,上传附件成功的提示view,网络失败的提示view等。但是虽然这些view很少出现,但是我们却常常一直把它们放在内存中。另外,当收到内存警告时,我们只能自己手工把这些view从super view中去掉。

    我们现在可以使用下面的方法:

    addChildViewController: //添加

    removeFromParentViewController //删除

    transitionFromViewController:toViewController:duration:options:animations:completion://转换

    willMoveToParentViewController: //当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用

    didMoveToParentViewController://当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

    这样,就能够将一个页面中的UIViewController控制起来,而不是混乱的共用一个UIViewController

    ,最重要的是,编程习惯的革命:降低了功能的耦合度!

    下面是childViewController的一个简单使用例子

    //在parent view controller 中添加 child view controller
       FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
        [self addChildViewController:firstViewController];
    
        SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        [self addChildViewController:secondViewController];
    
        ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
        [self addChildViewController:thirdViewController];
    
        [self.view  addSubview:thirdViewController.view];
    
      // addChildViewController回调用[child willMoveToParentViewController:self] ,但是不会调用didMoveToParentViewController,所以需要显示调用
        [thirdViewController didMoveToParentViewController:self];
        currentViewController=thirdViewController;
    
      //切换child view controller
         [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
                }  completion:^(BOOL finished) {
                   //......
                }];
        currentViewController=firstViewController;
    
      //移除child view controller
        // removeFromParentViewController在移除child前不会调用[self willMoveToParentViewController:nil] ,所以需要显示调用
        [currentViewController willMoveToParentViewController:nil];
        [currentViewController removeFromSuperview];
        [currentViewController removeFromParentViewController];
  • 相关阅读:
    杨玲 201771010133《面向对象程序设计(java)》第六周学习总结
    杨玲 201771010133《面向对象程序设计(java)》第五周学习总结
    【Alpha】Scrum meeting 3
    【Alpha】Scrum meeting 2
    【Alpha】Scrum meeting 1
    实验八 团队作业四:团队项目需求分析建模与系统设计
    超越队 实验七 团队作业3 :团队项目需求分析与原型设计
    超越队 实验六 团队作业2 :校园失物招领系统
    超越队 实验五 团队作业1:软件研发团队组建与软件案例分析
    【Alpha】Scrum meeting 3
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026903.html
Copyright © 2011-2022 走看看