`
zl4393753
  • 浏览: 340394 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

loadView的用法[转载]

 
阅读更多
原文链接:http://haoxiang.org/2010/11/loadview-usage/


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...

    loadView和viewdidload

    loadView和viewDidLoad、viewDidUnLoad区别

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

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

    TKLoadView:自定义LoadView

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

    一个通用Android的LoadViewHelp

    常见的转圈圈自不必说,但是按照通常的想法,我们往往是加xml里面的view通过隐藏和现实来实现,这种方式实在不太方便,现在实现了一个ViewLoadHelp,直接通过构造构造方法传入待loading的View,方便快捷。...

    Viewrrlkalkadsva

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

    Snappy:用于生成缩略图,快照,PDF,URL或HTML页面的php类库.zip

    Snappy是PHP5用于生成缩略图,快照,PDF,URL或HTML页面。它采用了优秀的基于WebKit的wkhtmltopdf和wkhtmltoimage可以适应在OSX,Linux的窗口。

    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....

    swipeloadview:在任意下拉刷新组件中中使用ListView,RecyclerView,GridView,ExpandableListView时,为下拉刷新组件增加上拉加载功能

    LoadMoreHelper 原SwipeLoadView已经改名为LoadMoreHelper,支持更多刷新控件。 LoadMoreHelper可以为任意下拉刷新控件,多种滚动布局(RecyclerView, ListView, GridView, ExpandableListView等) ...

    自定义AlertView

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

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

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

    initWithCoder与initWithFrame

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

    构建 View 时可能用到的代理函数调用顺序 viewdidload

    本文将重点介绍`viewDidLoad`与`viewWillAppear`两个关键方法的调用时机及作用,并通过图表形式总结常见的生命周期方法调用顺序,以便于开发者更好地理解和应用。 #### 视图控制器的生命周期 视图控制器是iOS应用...

    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...

Global site tag (gtag.js) - Google Analytics