• 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需要更新约束的时候
  • 相关阅读:
    牌型种数|2015年蓝桥杯B组题解析第七题-fishers
    加法变乘法|2015年蓝桥杯B组题解析第六题-fishers
    九数组分数|2015年蓝桥杯B组题解析第五题-fishers
    [Oracle]Oracle学习小结(1)
    [Oracle]Oracle数据库任何用户密码都能以sysdba角色登入
    【oracle】Enterprise Manager 无法连接到数据库实例。下面列出了组件的状态---个人解决方案
    从两个字符串中找出最大公共子字符串
    Java学习小结(1)-数组的创建与传参
    php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常
    php学习日志(4)-The mbstring extension is missing. Please check your PHP configuration错误及解决方法
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5368271.html
Copyright © 2020-2023  润新知