• UIViewController简介


    主要工作:

    1. 更新view,修改view数据
    2. 响应用户交互
      • UIViewController也是UIResponder对象,在responder chain中的位置处于UIViewController的根视图和其父视图之间
      • 如果view controller内的视图都不处理事件,那么view controller将会处理事件、或者将事件传递给视图的父视图
    3. 管理view布局,调整view大小

    为view controller指定view

    1. 通过storyboard加载view,同时能指定view controller和view之间的关联,还能指定viewcontrollers之间的关联
      • 使用instantiateViewControllerWithIdentifier:获取UIStoryBoard对象
    2. 通过nib file创建views
      • 使用initWithNibName:bundle:来进行viewcontroller初始化
    3. 使用loadview
      • 在loadview方法中手动代码创建view和视图之间的关系

    view controller的根视图(root view)总是会适应指定的空间,而其他view则需要使用 Auto Layout 来自适应布局

    管理view

    • @property(nonatomic, strong) UIView *view
      • view controller的root view,默认为空
      • 当访问这个属性且这个属性为空时,view controller会自动调用loadview方法,并返回loadview返回的view
      • 每个view controller都是root view唯一的拥有者
      • 当低内存时view controller会将view赋为nil
    • -(void)loadView
      • 当属性view为nil时,加载或者创建view并assign给属性view
      • 当view controller有一个相关联的nib file文件,这个方法将会从nib file中加载view
      • 如果是通过 Interface Builder 方式创建的view,请不要override这个方法
      • 如果是希望通过手动代码创建view,可以重载这个方法
      • 有更多view相关的初始化操作 ,可以在viewdidload中进行
      • 不要在这个方法里调用 [supper loadView] 或者 self.view
    • -(void)viewDidLoad
      • 当controller'€™s view 后会被调用
      • 通过nib file加载view 还是通过loadview中手动创建view 都会调用viewdidload

    展示view controller

    • -(void)showViewController:(UIViewController *)vc sender:(id)sender
      • 目的就是简化编程,省去判断一些条件。比如,会自动为nav controller有关的vc调用push,而为普通的view controller调用present函数。
    • -(void)showDetailViewController:(UIViewController *)vc sender:(id)sender
      • 为了UISplitViewController 而写的高级版showViewController
    • -(void)presentViewController:(UIViewController*)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
      • 传统的模态跳转方法
    • -(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
      • 与presentViewController搭配使用

    配置view布局行为

    • -(void)viewWillLayoutSubviews
      • 通知view controller它的view将要布局subviews
    • -(void)viewDidLayoutSubviews
      • 通知view controller的view subviews已经完成布局
        • addSubview会触发layoutSubviews
        • 设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
        • 滚动一个UIScrollView会触发layoutSubviews
        • 旋转Screen会触发父UIView上的layoutSubviews事件
        • 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
    • -(void)updateViewConstraints
      • 当view controller的view需要更新约束的时候
  • 相关阅读:
    Assets Pipeline
    how to execute-shell-commands by ruby
    DFS---迷宫问题
    病毒感染监测
    RE数组开多大?
    C++如何输入含空格的字符串
    后缀算术表达式
    中缀表达式转化为后缀表达式
    基于两端操作的循环队列的实现---怎么判断队满??
    循环队列--忘记分配空间和如何用tag判断队空队满
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5368271.html
Copyright © 2020-2023  润新知