zoukankan      html  css  js  c++  java
  • loadView的用法

    转自:http://haoxiang.org/page/5/

    UIViewController的loadView

    用UIViewController有一段时间了,才发现以前对loadView的理解完全不到位。

    假如我们用Xcode新建一个View-based Application,在ViewController.m中加上

    - (void) loadView {
    NSLog(@"loadView Called");
    }

    再增加viewDidLoad,按照一般的情况,我们会有这样的Code

    - (void) viewDidLoad {
    [super viewDidLoad];
    UIButton *customButton = [UIButton buttonWith.....
    ......
    [self.view addSubView:customButton];
    }

    现在打开MainWindow.xib,删掉其中的ViewController,并在AppDelegate.m的

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

    里增加ViewController的初始化

    viewController = [[XXXViewController alloc] init];

    编译运行就有问题了。Console中不断的输出loadView Called!

    仔细的阅读loadView的文档,才知道loadView不是这么用的。

    loadView在每一次使用self.view这个property,并且self.view为nil的时候被调用,用以产生一个有效的self.view。这个接口原本是为了让我们自定义view用的。在不被subclass实现的情况下,也就是[super loadView]的效果,应该就是产生了一个有效的view,也就是一个空白的view。

    在上面这种情况下,loadView被实现为空(只有一条打印语句),而且我们没有通过XIB初始化ViewController,所以在viewDidLoad被执行时,self.view是为nil的。所以在执行[self.view addSubView:customButton]时,loadView被调用,用来产生一个有效的view,使得self.view不再为nil。罢特,我们错了(-_-!)。我们的loadView什么也没有做,于是就出现了上面的情形,不断的调用一个什么都不做的loadView….

    当然,我们只要在loadView中增加一句[super loadView]就没有问题了。但这并不是Cocoa的设计者所期望的。

    loadView仅仅应该在开发者希望自行通过编码而不是Interface Builder定制view的时候被实现,而且不应该在其中调用[super loadView],你的loadView中应该有self.view = …这样的行为。

    如果仅仅是想要在当前view上增加一些UIButton或是UILabel,应该在viewDidLoad里去做,此时不要实现自己的loadView。

  • 相关阅读:
    必读:Spark与kafka010整合
    6 个开源的家庭自己主动化工具 | Linux 中国
    承上 DBlink 与 SCN | 新增视图找出外部 SCN 跳变
    NetBeans使用Consolas中文乱码的解决
    IDEA community + Gradle + Gretty 调试 servlet 应用 + war包部署到tomcat
    解决ubuntu下IntelliJ IDEA无法锁定到启动器的问题
    virtualbox安装android6.0并设置分辨率为1920x1080x32
    Ubuntu安装Sqlite报错:No module named 'ConfigParser'
    Linux常用指令笔记
    解决Warning Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
  • 原文地址:https://www.cnblogs.com/xiaonanxia/p/2708665.html
Copyright © 2011-2022 走看看