iOS中ViewController加载View的几种方式

ViewController 加载 View 的方式有:

  • 创建 ViewController 的同时加载 View,它可通过加载关联 VC 的 xib,或纯代码创建实现。其调用方法有:

    • init
      此方法可以是加载关联了 VC 的 xib方式,也可以是纯代码创建方式,其在UIViewController的执行顺序是:
    1. initWithNibName:bundle:
    2. init
    3. loadView
    4. viewDidLoad
    • initWithNibName:bundle:
      此方法仅是加载关联了 VC 的 xib可以使用,它不会立即加载 View,所以使用时对 View 的额外操作应该在 viewDidLoad 中进行。其在UIViewController的加载的顺序是:
    1. initWithNibName:bundle:
    2. loadView
    3. viewDidLoad

    loadView:此方法是加载 View 时默认实现的,不允许直接调用,子类可重写。实现过程是:在Bundle里搜索与被创建的ViewController相同类名的xib文件,搜索到了就加载此xib(xib必须与被创建的ViewController关联),没有搜索到就创建一个“plain view”作为 ViewController’s view。如果子类重写该方法,则不会自动去搜索并加载xib。所以如果使用init 方法创建VC,并加载关联了该 VC 的 xib 时,子类不要重写,否则此xib将不会被加载,视图漆黑。

  • 直接创建加载 View。它可通过加载 xib(可不关联VC),或纯代码创建实现。其调用方法有:

    • init
      此方法在 UIView 的加载的顺序是:
    1. init
    2. initWithFrame:
    • initWithFrame:
      此方法在 UIView 的加载时只实现本身。

    • loadNibNamed:owner:options:
      加载 xib,默认xib的 File’s owner是NSObject,返回的是一个数组。
      若 xib 中 File’s owner 关联了其它类,则参数owner应该是该类实例对象;反之,则任何一个NSObject类或其子类的实例对象皆可。
      若 xib 中 View 不关联其它类,则仅仅只是获取加载View,不会触发UIView的方法;若关联了非UIView的类,不会触发UIView的方法,同时会显示台打印提示"Unknown class xxx in Interface Builder file.";若关联了UIView或其子类,此方法在 UIView 的加载的顺序是:

    1. initWithCoder:

    2. awakeFromNib:

      需要注意的是:在UIViewController的 viewDidLoad 中,一个使用此方法创建的 subView,设置frame,并添加到VC的视图时,若VC也是用xib创建并加载,此时VC视图在 viewDidLoad 中大小是xib中显示的大小,但在 viewWillAppear: 中显示的是另一个大小(除非当前手机屏幕大小刚好等于 xib 的视图的大小),这种情况下在界面上实际显示的效果会出错。解决此问题的办法是 vc.view.autoresizesSubviews = NO

    • initWithCoder:
      此方法是通过 unarchiver 获取 xib 中的所有对象。

    • awakeFromNib:
      此方法是在 unarchiver 成功后,开始加载View,此方法可对一些控件进行额外的配置。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值