@chenbinghua
2015-09-12T10:32:51.000000Z
字数 1787
阅读 1473
iOS笔记
控制器通过loadView方法加载自己的view
当需要自定义控制器View时,可以重写控制器的loadView方法
// loadView在第一次使用控制器的view的时候调用,即控制器的view是懒加载的
- (void)loadView
{
// 自定义控制器View时,不要调用[super loadView]
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.view.backgroundColor = [UIColor purpleColor];
}
// 注意:在这个方法中是错误的,如果没有自定义view,就不能获取控制器的view,否则会造成死循环
- (void)loadView
{
self.view.backgroundColor = [UIColor redColor];
}
// 原因是self.view点语法转化成一下方法,造成死循环
- (UIView *)view
{
if (_view == nil) {
[self loadView];
[self viewDidLoad];
}
return _view;
}
#import "AppDelegate.h"
#import "MJViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建UIWindow
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
/*
1.重写了控制器的loadView方法,则根据重写的loadView方法创建
MJViewController *vc = [[MJViewController alloc] init];
*/
/*
2.如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MJViewController *vc = [storyboard instantiateInitialViewController];
*/
/*
3.如果通过xib创建, 会创建xib中描述的veiw做为控制器的veiw
MJViewController *vc = [[MJViewController alloc] initWithNibName:@"xibName" bundle:nil];
*/
/*
4.如果通过控制器alloc init方法创建,底层会调用initWithNibName:bundle:
如果有同名去掉Controller的xib(MJView),会自动该xib中描述的view做为控制器的veiw
MJViewController *vc = [[MJViewController alloc] init];
*/
/*
5.如果有有同名的xib(MJViewController), 会自动找到该xib的view做为控制器的view
MJViewController *vc = [[MJViewController alloc] init];
*/
// 6.如果没有xib和storyboard相关文件, 会自动创建一个空白的view做为控制器的veiw
MJViewController *vc = [[MJViewController alloc] init];
// 设置控制器为window的根控制器
// 默认控制器的view颜色是[UIColor clear] ,即几乎透明
self.window.rootViewController = vc;
// 显示window
[self.window makeKeyAndVisible];
return YES;
}
@end