美文网首页
父子控制器

父子控制器

作者: 英雄出少年 | 来源:发表于2019-04-16 22:15 被阅读0次

    如果只是添加View,那么控制器要控制的东西很多会累死,所以得添加控制器

    一、存在的问题分析
    1.控制器已经死了,但是控制器的view还在
    1> 点击控制器view内部的按钮、开关,直接EXEC_BAD_ACCESS错误(野指针错误,坏内存访问)
    2> 一拖拽tableView,tableView上面显示的数据突然消失了

    2.叠加了很多不必要的view

    3.控制器创建得比较频繁

    二、解决方案
    1.保证控制器只创建一次,而且不让它马上死
    2.保证控制器和控制器的view同在

    三、优化
    1、将创建好的控制器添加到数组中,通过数组进行操作
    2、添加一个当前显示View属性,每次显示一个View前,先移除之前显示View

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

    1.屏幕的旋转事件,首先会传递给窗口的根控制器(window.rootViewController)

    2.窗口的根控制器又会将屏幕的旋转事件,传递给它的子控制器

    3.子控制器又会将屏幕的旋转事件,传递给它自己的子控制器

    4.以此类推,所有的子控制器都能监听到屏幕的旋转事件

    通过addChildViewController:添加的控制器,就会成为子控制器,会被自动添加到childViewControllers数组中

    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator(id<UIViewControllerTransitionCoordinator>)coordinator

    ** 父子控制器的开发准则**
    1.如果2个控制器的view是父子关系,那么这2个控制器也应该是父子关系,系统一些事件是通过这种关系传递的

     2.代码表示形式
    ` [vc0.view addSubview:vc1.view]`;
    ` [vc0 addChildViewController:vc1]`;
     或者
     `[vc0.view addSubview:redView]`;
    ` [redView addSubview:yellowView]`;
     `[yellowView addSubview:vc1.view]`;
     `[vc0 addChildViewController:vc1]`;
    

    Modal
    :: autoresizingMask


    image.png

    要想modal 和 push 必须成为父子控制器 , 会 顺着响应者链条向上找父控制器UInavigationController 和 UItabBarController 控制器都是如此
    [self.navigationController pushViewController:green animated:YES];
    self.tabBarController

    ~

    • (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
      {
      NSLog(@"%s", func);
      [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
      }
      ~

    指示器


    image.png

    把控制器添加到UIScrollView


    image.png

    优化后的


    image.png image.png

    成为子控制器后

    相关文章

      网友评论

          本文标题:父子控制器

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