那么,我应该在
loadView
中创建self.view
,并添加子视图呢,还是应该在
loadView
中创建self.view
,然后在viewDidLoad
中添加子视图呢?loadView
中创建self.view
,并添加子视图呢,loadView
中创建self.view
,然后在viewDidLoad
中添加子视图呢?当您从NIB加载视图并希望在启动后执行进一步的自定义时,请使用viewDidLoad。
如果您想以编程方式创建视图(而不是使用Interface Builder),请使用loadView。
针对您的具体问题,您应该在viewDidLoad中添加子视图。因为如果您重写loadView,您必须完成所有工作,加载所有视图。
以下是来自苹果文档的解释:
加载循环中发生的步骤如下:
1.
* Some part of your application asks for the view in the view
controller’s view property.
2.
* If the view is not currently in memory, the view controller calls its loadView
method.
3.
* The loadView method does one of the following: If you override this method, your implementation is
responsible for creating all necessary views and assigning a non-nil value to the view property.
If you do not override this method, the default implementation uses
the nibName and nibBundle properties of the view controller to try to load the view from the specified nib file. If the specified nib file is not found, it looks for a nib file whose name matches the name of the view controller class and loads that file.
If no nib file is available, the method creates an empty UIView object
and assigns it to the view property.
4.
* The view controller calls its viewDidLoad method to perform any
additional load-time tasks.
其实很简单。如果您不使用IB,则您的UIViewController的视图属性为空。所以在loadView中设置它!
我只在loadView中设置视图,没有其他操作。
除此之外,所有操作都在viewDidLoad内完成。以下是一些示例:
- (void)loadView {
CGRect frame = [[UIScreen mainScreen] applicationFrame];
baseView = [[UIView alloc] initWithFrame:frame];
[self setView:baseView];
[baseView release];
}
就是这样!我完成了。而且永远不想再添加更多。然后在viewDidLoad方法中,我添加了所有我想要的子视图。
- (void)viewDidLoad {
[super viewDidLoad];
msg = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 50)];
[msg setText:@"Your profile is empty!"];
[[self view] addSubview:msg]; // hey, I have done my view at loadView, so I have it now
[msg release];
}
loadView是实际设置视图的方法(设置所有输出口,包括self.view)。
viewDidLoad可以通过其名称来确定。它是一个委托方法,在视图加载后(所有输出口都已设置)调用,只是通知控制器现在可以开始使用输出口了。
viewDidLoad: “此方法在视图控制器将其关联的视图加载到内存中后调用。无论视图是存储在nib文件中还是在loadView方法中以编程方式创建,都会调用此方法。”
loadView: “如果您手动创建视图,则必须重写此方法并使用它来创建视图。”
只有在想要自己创建视图时才使用loadView。
在使用界面构建器或使用nib初始化后,不要再使用loadView,因为这些操作已经在底层实现中调用了loadView。
此外,在使用loadView时,请先分配视图,然后再进行任何其他设置:
-(void)loadView {
[super loadView];
// if you do any things here before assigning a view
// it will try to get a view first by calling loadView()
// and ends up with a crash since a dead loop.
self.view = ...;//assign your view here
//do other settings
}
使用 viewDidLoad
初始化视图和控件。如果没有 Nib/Xib 并且希望您的 ViewController 有自定义(非 UIView
)视图,则使用 loadView
。