UIViewController的研究

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)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的研究)