原文链接:
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。
分享到:
相关推荐
当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewController就会自动调用loadView这个方法。这个方法就会加载或者创建一个view对象,赋值给view属性。 loadView默认做的事情是:如果此...
loadView和viewDidLoad、viewDidUnLoad区别
搜索一下,全是转载,大概内容是这样: loadView 手动加载view viewDidLoad用于nib文件加载后,进一步处理 viewDidUnload是viewDidLoad的镜像 参考官方文档,我给出纠正: 一、loadView 永远不要主动调用这个函数...
TKLoadView 自定义LoadView API与APPLE的UIActivityIndicatorView相同,并且我已经提供了协议。
revit二次开发在wpf中显示模型,利用Autodesk 提供的PreviewControl 方法,在wpf界面中显示项目中的某个视图
常见的转圈圈自不必说,但是按照通常的想法,我们往往是加xml里面的view通过隐藏和现实来实现,这种方式实在不太方便,现在实现了一个ViewLoadHelp,直接通过构造构造方法传入待loading的View,方便快捷。...
LoadMoreHelper 原SwipeLoadView已经改名为LoadMoreHelper,支持更多刷新控件。 LoadMoreHelper可以为任意下拉刷新控件,多种滚动布局(RecyclerView, ListView, GridView, ExpandableListView等) ...
方法去调用NIB文件初始化自身,即使那没有使用nib文件也会调用这个函数(默认情况下init方法已经为你的做这件事情了),如果你调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读取一个名字和你...
学长发我的,我无耻的分享给大家了。 希望大家对于那些 viewdidload viewwillappear 的调用顺序有个了解。
MBSimpleLoadingIndicator ...用法 ###更改百分比 // Change the percentage [_loadview incrementPercentageBy: 17 ]; // Fill up and start ending animation [_loadview finish ]; ###加载程序的动画属性 // Change
滚动您自己的图形和动画,并使用标准IBAction挂钩或单个超级方法调用发送信号。 如果在UINavigationController使用此控制器,则在用户切换选项卡时自动处理导航栏属性更改 还通过在多次点击时自动调用...
let loadView = LWTGifLoadView(frame:self.view.frame, callback:{ //网络请求 print("重新请求") }) self.view.addSubview(loadView) ``` github下载:https://github.com/winterLiao/GifLoadView
1.基于swift4.2框架组件化 2.rxswift做网络回调处理、mock数据管理 ...5.带EmptyView LoadView ErrorView的BaseViewController 6.带EmptyView LoadView ErrorView的TableView和CollectionView ...
*在视图中修改的话就在loadView中 *在AppDelegate中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 1.关闭键盘: [[IQKeyboardManager ...
:warning: Swift UI已发布,因此现在不赞成使用此方法,而推荐使用官方替代方法。 这将不再保持。 这是一个有趣的实验 :smiling_face_with_sunglasses: 指称 Komponents是一个Swift框架,用于构建面向组件的接口。 ...
在ViewDidLoad或LoadView方法中,设置videoPath 。 它可以是本地路径,也可以是 url。 然后,调用play 。 享受 :)例子- ( void )viewDidLoad { [ super viewDidLoad ]; self. videoPath = [[ NSBundle mainBundle...
// 设置LoadView的factory,用于创建使用者自定义的加载失败,加载中,加载更多等布局,写法参照DeFaultLoadViewFactory // ListViewHelper.setLoadViewFractory(new LoadViewFractory()); PullToRefreshListView ...
pulltorefreshAndroid下拉刷新库,利用viewdraghelper实现集成了下拉刷新,底部加载更多,以及刚进入加载数据的loadview。包括了listview与gridview的改写。效果1:效果2:效果3:效果4:效果5:使用说明:imageList=...