当我没有笔尖编程时,我的印象是我需要调用loadView来初始化我的视图,如下所示:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nil bundle:nil];
if (self) {
// Custom initialization
[self loadView];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
(我已经设置了nibNameOrNil = nil,因为没有nib.)
然后,我设置了视图,如下所示:
- (void) loadView {
self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)];
[self viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
这是在viewDidLoad中执行的所有操作.
我仍然不确定我是否应该以这种方式调用loadView和viewDidLoad.他们没有被自动调用.
令人困惑的是UIViewController类引用的文档:
loadView讨论
你永远不应该直接调用这个方法.视图控制器在请求视图属性时调用此方法,但当前为nil. 如果手动创建视图,则必须覆盖此方法并使用它来创建视图.如果使用Interface Builder创建视图并初始化视图控制器 - 也就是说,使用initWithNibName:bundle:方法初始化视图,直接设置nibName和nibBundle属性,或者在Interface Builder中创建视图和视图控制器 - 那么你不能覆盖这个方法.
所以,如果我不应该直接调用它,我不明白如何调用loadView.
此方法的默认实现查找有效的nib信息,并使用该信息加载关联的nib文件. 如果未指定nib信息,则默认实现会创建纯UIView对象并使其成为主视图.
我不明白它是如何工作的 - 创造一种痛苦的UIView.
如果为了手动创建视图而重写此方法,则应该这样做并将层次结构的根视图分配给view属性.(您创建的视图应该是唯一的实例,不应与任何其他视图控制器对象共享.)此方法的自定义实现不应调用super.
如果要对视图执行任何其他初始化,请在viewDidLoad方法中执行此操作.在iOS 3.0及更高版本中,您还应覆盖viewDidUnload方法以释放对视图或其内容的任何引用.
好的,到目前为止它没有说明如何调用viewDidLoad.所以对于viewDidLoad:
viewDidLoad讨论
在视图控制器将其关联的视图加载到内存后调用此方法.无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法.此方法最常用于对从nib文件加载的视图执行其他初始化步骤.
叫什么?
由于我的代码中没有自动调用这些方法,因此我认为我必须自己调用它们.但我仍然没有从文档中得到明确的理解,这是正确的做法.