`
lizaochengwen
  • 浏览: 659865 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

loadView的用法

阅读更多
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。
分享到:
评论

相关推荐

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

    本文将深入探讨`loadView`方法的使用及其注意事项。 首先,`loadView`方法的主要作用是在需要时初始化或加载UIViewController的主视图`view`。当尝试访问一个UIViewController实例的`view`属性,且该属性当前为nil...

    IOS 中loadView,viewDidLoad,viewDidUnload详解及使用

    在iOS开发中,了解UIViewController的生命周期方法至关重要,特别是`loadView`, `viewDidLoad`, 和 `viewDidUnload`。这三个方法在视图控制器的视图管理过程中扮演着不同的角色。 首先,我们来详细解读`loadView`。...

    TKLoadView:自定义LoadView

    【TKLoadView:自定义LoadView】是一种在iOS开发中用于创建类似苹果系统自带的UIActivityIndicatorView的...在实际开发中,掌握TKLoadView的使用方法和原理,能够提升应用的交互体验,使加载过程变得更加友好和美观。

    Viewrrlkalkadsva

    5. **视图卸载**: 如果ViewController是通过 nib 文件创建的,或者在`loadView`方法中调用了`super.loadView`,当收到内存警告并且View不再使用且已经消失时,ViewController会释放View并将指针置为nil,同时调用`...

    iOS 延迟加载

    这里创建了一个定时器,会在3秒后调用 `loadView` 方法。不过,使用 `NSTimer` 时要注意管理好生命周期,防止内存泄漏,以及在不需要时取消定时器。 3. **GCD(Grand Central Dispatch)** GCD是Apple提供的多线程...

    Laravel开发-laravel-dompdf

    2. 在控制器中,使用 `PDF::loadView` 方法加载视图并生成 PDF: ```php use PDF; public function generatePdf() { $pdf = PDF::loadView('pdf.example'); return $pdf->download('example.pdf'); } ``` 在...

    UIViewController的加载方式和UIView的加载详解

    - 先检查是否实现了loadView方法并使用返回的视图; - 然后根据是否从storyboard加载来加载视图; - 接着尝试根据XIB文件名加载视图; - 如果没有XIB文件,则尝试寻找类名去除"Controller"后的xib文件,如FirstView....

    自定义AlertView

    1. **视图构建**:创建一个新的UIViewController子类,并在其`loadView`方法中设置背景、按钮、文本等UI元素。这些元素可以通过代码直接创建,或者使用Storyboard进行设计。 2. **尺寸计算**:为确保AlertView在...

    ios中文开发教程资料全收录

    - `loadView` 方法会在视图控制器的生命周期中自动调用,但通常情况下,你不应该手动调用它。 ##### 2.3 执行顺序示例 为了理解`loadView` 和其他相关方法的执行顺序,可以通过添加日志输出来观察: ```objective-c...

    initWithCoder与initWithFrame

    方法去调用NIB文件初始化自身,即使那没有使用nib文件也会调用这个函数(默认情况下init方法已经为你的做这件事情了),如果你调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读取一个名字和你...

    UIViewController Demo源代码

    - nib文件加载的`UIViewController`子类,检查`nibName`和`initWithNibName:bundle:`方法的使用。 - 不带nib的`UIViewController`子类,观察`loadView`方法的实现。 - 如何在应用启动时设置`rootViewController`...

    Laravel开发-laravelmpdf

    你可以创建一个视图,将HTML内容放入视图文件,然后使用`PDF::loadView()`方法加载这个视图并生成PDF。例如: ```php use Barryvdh\DomPDF\PDF; PDF::loadView('your.view.name')->save('path_to_save.pdf'); ``` ...

    简单阐述一下Objective c

    3. `viewDidUnload`:在系统内存紧张时,如果UIViewController的视图不在当前的视图层次结构中,且控制器实现了`loadView`方法,系统会调用此方法。这里应该释放与视图相关的所有资源,包括IBOutlets并将其设置为nil...

    Laravel开发-laravel-pdf

    让我们一起探索这个组件的核心特性和使用方法。 首先,`laravel-pdf`是基于Laravel Facades和Service Container设计的,这使得它易于理解和集成到现有的Laravel项目中。通过使用Laravel的服务提供者...

    Laravel开发-l5mpdf

    在上面的代码中,我们首先定义了要传递到视图的数据,然后使用`PDF::loadView`方法加载包含HTML内容的视图文件,并将数据传入。最后,`download`方法会触发PDF下载,用户可以在浏览器中保存这个文件。 为了使PDF看...

    Laravel开发-laravel-mpdf

    在这个例子中,我们首先传递数据到视图`pdf.view`,然后使用`loadView`方法将视图内容转换为PDF,并使用`download`方法将其作为文件下载。 自定义设置 除了基本的PDF生成,laravel-mpdf还允许你进行更复杂的设置。...

    视图控制器无动画版代码完整版.7z

    - 加载视图:当视图首次需要显示时,调用`loadView`方法加载视图层次结构。 - 视图呈现:`viewDidLoad`在视图加载后调用,适合设置初始界面状态。 - 视图布局:`viewWillAppear:`, `viewWillDisappear:`在视图...

Global site tag (gtag.js) - Google Analytics