UIViewController入门

UIViewController为所有的iOS apps提供了视图管理的基础。View Controller与其管理的视图进行了严格的绑定,并且参与到处理事件的响应链中。一个App至少包含一个View Controller,通常我们会自定义一个UIViewController的子类,包含App相关的视图显示以及与用户交互的处理方法。

View Controller的使用场景:

1. 调整或显示视图;

2. 调整视图的内容;

3. 用户与视图进行交互

常用属性

  • viewviewController管理的视图。该视图是viewController视图层次中最底层的根视图。若访问该属性,且属性的当前值为nil时,view controller会自动调用loadView方法并返回一个结果视图。
  • editing:是否允许用户编辑视图内容。当editing为YES时,通过viewController获得的editButtonItem会自动变为从edit变为done。这个通常在navigationController中使用。
  • interfaceOrientation:一个只读变量,显示当前界面的方向,只有当该View Controller占据全屏时才有效。主要属性如下:
    • UIInterfaceOrientationPortrait
    • UIInterfaceOrientationPortraitUpsideDown
    • UIInterfaceOrientationLandscapeLeft
    • UIInterfaceOrientationLandscapeRight
  • nibBundle:指向当前controller的nib bundle(NSBundle对象表示文件系统中能够在程序中使用的代码和资源的位置。NSBoundle对象定位程序资源,动态加载和卸载可执行代码,辅助本地化。)
  • nibName:指向当前controller的nib文件。若希望使用nib文件来初始化视图,建议明确指定nib文件的名称。如果没有指定nib文件,同时也没有重写loadView方法,则view controller会通过其他方式来搜索nib文件。例如:
    • 若controller的类名为MyViewController,则他会自动搜索没有Controller后缀的文件:MyView.nib作为当前View Controller的nib文件
    • 若controller的类名为MyViewController,其会搜索:MyViewController.nib作为当前View Controller的nib文件。
  • tabBarController:指向当前view controller嵌入的UITabBarController对象。
  • navigationController指向当前view controller嵌入的UINavigationController对象。
  • splitViewController指向当前view controller嵌入的UISplitViewControler对象。
  • title:表示当前viewController管理的视图。
  • tabBarItem:当ViewController添加到一个tab bar controller中时,该属性表示当前viewController。该属性是UITabBarItem创建的唯一实例,当viewController是tab bar controller的子对象时,用来表示当前的view Controller。
  • toolbarItems:该属性是一个包含UIBarButtonItem对象的数组,与UINavigationController对象协同工作。如果当前的viewController嵌入到一个navigationController界面中,并且navigationController显示了一个toolbar,则该属性指向了toolbar中显示的item。

常用方法

  • - (void)viewDidLoad:该函数将在controller的视图载入到内存之后调用。该函数无论视图是从nib文件中载入还是从编程创建(loadView)方法中载入都会调用,是非常重要的方法。

  • - (void)loadView创建由controller管理的视图。该函数不能直接调用,该函数当controller的view属性需要使用,但是当前为空时进行调用。即,该方法创建了一个视图,并将创建的结果赋值到controller的view属性。如果view controller关联了一个nib文件,则此时视图将从nib文件中载入。其中,通过设置View Controller的nibName属性来关联一个View Controller和一个nib文件。或者直接通过initWithNibName:bundle来初始化一个Controller。

  • (void)viewDidAppear:(BOOL)animated:通知View Controller其视图已经添加到了视图层次结构中。可以通过重写该方法,在presenting(切换)视图时增加额外的处理方法,在该方法中,必须调用super中的方法传递操作。BUT,当该View Controller(Controller A)通过popover方法切换到另一个View Controller(Controller B)时(此时Controller A在controller B的popover队列中),若controller B调用dismissed方法后,viewDidAppear方法不会被触发。

  • (void)viewWillAppear:(BOOL)animated:通知View Controller它的View即将添加到视图层次结构中。该方法在接收者(View Controller)的视图即将添加到视图层次结构中,以及所有在view中显示的动画配置之前调用。通过重写该方法,可以自定义视图显示相关的操作。例如,可以在该方法内改变状态栏的方向和样式,使其与视图的方向和样式保持一致。

  • - (void)viewDidDisappear:(BOOL)animated:通知View Controller其视图已经从视图层次结构中移除。该方法能够在视图dismissing或者hidding时增加额外的操作。与viewDidAppear类似,必须调用super进行相关操作。

  • - (void)viewWillDisappear:(BOOL)animated:通知View Controller它的View即将从视图层次中移除。该方法在视图从层次结构中移除时调用。该方法在视图实际移除之前以及所有的动画配置之前调用。通过重写该方法,可以提交编辑改变、放弃视图的first responder状态以及其他相关任务等。例如,可以在该方法中还原viewWillAppear中的状态栏样式和方向的操作。

  • - (void)viewDidLayoutSubviews:当View Controller的视图展示他的子视图时调用。当View Controller视图的bounds发生改变时,view会自动调整它子视图的位置,此时系统会调用该方法。但是,该方法并不关心子视图中私有布局的调整,每一个子视图对自己的layout负责。

  • - (void)viewWillLayoutSubviews:当View Controller的视图即将展示子视图时调用。当视图的bounds发生改变,view调整其子视图的位置时,可以通过重写该方法添加当前视图展示子视图前的操作。

时间序列


视图显示序列


视图消失序列


生命周期







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值