如果我覆盖loadView方法,则会调用loadView是否存在nib文件。如果我不覆盖loadView并且有一个nib文件,它会被调用吗?
答案 0 :(得分:8)
是的,loadView
负责根据视图控制器的类名自动从已知的bundle加载nib文件。如果您覆盖loadView
并且未调用[super loadView]
,则不会加载任何笔尖。当调用其loadView
属性并且为nil时,UIViewController类将调用view
。
另请注意,覆盖loadView
并调用super很可能不是您想要的。 loadView
用于设置self.view
属性,就是这样。其他一切都应该发生在viewDidLoad
等。
答案 1 :(得分:0)
是:
@implementation iPhoneHomeViewController
- (void)loadView {
DEBUGLOG(@"view = %@, superview = %@", [self valueForKey:@"_view"], [[self valueForKey:@"_view"] superview]);
[super loadView];
}
控制台:
GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul 1 10:50:06 UTC 2011)
Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU
General Public License, and you are welcome to change it and/or distribute copies of it
under certain conditions. Type "show copying" to see the conditions. There is absolutely
no warranty for GDB. Type "show warranty" for details. This GDB was configured as
"x86_64-apple-darwin".sharedlibrary apply-load-rules all Attaching to process 1671.
[Line: 40] -[iPhoneHomeViewController loadView]: view = (null), superview = (null)
答案 2 :(得分:0)
是。无论bundle是否具有Nib,都将始终调用Load视图。 loadView将为UIViewController加载视图,可以来自任何源。
因此,它以两种方式寻找观点
1。检查属性 nibFile ,如果您调用了 initWithNibName:bundle: 强> 或者如果你有故事板 - 故事板也存储在nib文件中创建的所有视图
2. 如果您没有从任何一个源设置nib,那么您计划自己创建视图。在这种情况下,您可以将此视图设置为稍后查看控制器的视图属性。