美文网首页
UIViewController的研究

UIViewController的研究

作者: ax4c | 来源:发表于2017-05-10 23:53 被阅读0次

    UIViewController作为MVC架构中Controller可以说是重中之重,负责加载、布置View,负责管理View的交互,也负责数据的响应。视图控制器也和其他的视图控制器交互。

    视图控制器的主要责任由三部分:
    1.更新视图的内容,通常是响应数据的修改
    2.响应用户和视图的交互
    3.调整视图的尺寸并管理界面的布局


    视图控制器加载视图的方式主要有三种:
    1.从Storyboard中加载
    2.从Nib文件中加载
    3.在loadView方法使用代码加载

    视图控制器需要注意可视性(visibility),比如视图的额外初始化、切换到其他视图控制器时保存状态。下面是视图控制器可视性的相关方法:

    -(void)loadView
    //加载视图
    
     -(void)viewDidLoad
    //视图加载完成之后
    
     -(void)viewWillAppear:(BOOL)animated
     //视图加载完成之后即将出现
    
      -(void)viewDidAppear:(BOOL)animated
      //视图出现之后
    
      -(void)viewWillDisAppear:(BOOL)animated
      //视图将要隐藏
    
      -(void)viewDidDisAppear:(BOOL)animated
      //视图隐藏之后
    

    一般使用viewWillAppear方法在视图出现前修改视图的显示,viewWillDisappear方法保存视图的信息。


    viewWillLayoutSubViewsviewDidLayoutSubviews方法是用来处理视图布局的,虽然默认情况下都是什么都不做的。在iOS 8之后,视图的旋转被视为大小的变化,使用viewWillTransitionToSize:withTransitionCoordinator方法管理。如果想判断是否横屏,可以采用下面的代码:

    -(void)viewWillTransitionToSize:(CGSize)size     withTransitionCoordinator:    (id<UIViewControllerTransitionCoordinator>)coordinator
    {
        [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
        BOOL isLandscape=size.width>size.height?YES:NO;
       //针对横屏的一些操作
    }
    

    视图控制器是作为容器(container)包含其他View Controller的,负责管理子视图控制器的显示,常见的有UITabBarControllerUINavigationController

    View Controller还有一类特殊的关系叫做弹出/呈现(present),如果一个标签视图控制器弹出了一个导航视图控制器,而这个导航视图控制器又弹出了一个视图控制器,这样标签视图的presentedViewController就是导航视图控制器,导航视图控制器的presentedViewController就是子视图控制器,如果definesPresentationContext是默认值NO的话,子视图控制器和导航控制器的presentingViewController都是标签控制器,否则,子视图控制器的presentingViewController是导航控制器。

    相关文章

      网友评论

          本文标题:UIViewController的研究

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