详解iOS App开发中UIViewController的loadView方法使用

当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewController就会自动调用loadView这个方法。这个方法就会加载或者创建一个view对象,赋值给view属性。

loadView默认做的事情是:如果此ViewController存在一个对应的nib文件,那么就加载这个nib。否则,就创建一个UIView对象。

如果你用Interface Builder来创建界面,那么不应该重载这个方法。

控制器的loadView方法以及view属性

控制器有一个view属性,我们经常在控制器中通过self.view来访问。这个view是一个很有意思的东西。

首先要明白这个view到底是什么东西。

一个控制器成为window的根控制器的时候,当这个界面即将显示,控制器的view会被加到window中用来显示界面。正常情况下控制器自带的view是"无色透明"的。

如果你在设置window的根控制器前创建一个Button直接加到window上,此时button出现在window上,但是在控制器的view的下面。此时点击按钮会发现按钮并不会响应点击。

这是因为控制器的view拦截了点击事件,这说明它并非真的完全透明(因为如果完全透明,那么不会拦截点击事件,可以设置viewController.view.alpha = 0来验证,此时按钮就可以响应点击)。事实上view是一个backgroundColor为clearColor的视图,clearColor是几乎透明的颜色但是并非完全透明,也就是说当有类似点击事件发生的时候,clearColor背景的view会拦截点击事件,因为它并非完全透明。

所以可以说控制器的view是一个看不见摸得着的东西...

另外view是懒加载的,也就是说,只有真正使用到控制器的view的时候它才会被创建出来。它就是在控制器的-loadView方法中创建出来的。

- (void)loadView

{

      // 类似这种实现

      // 可能还会进行更多的操作,比如判断是否有指定storyboard,如果是就会加载storyboard中控制器的view等操作

    UIView *view = [[UIView alloc] init];

      view.backgroundColor = [UIColor clearColor];

      // ...

      _view = view;

}

以上是 详解iOS App开发中UIViewController的loadView方法使用 的全部内容, 来源链接: utcz.com/z/314827.html

回到顶部