@chenbinghua
2015-09-12T02:32:51.000000Z
字数 1787
阅读 1652
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 {// 创建UIWindowself.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];self.window.backgroundColor = [UIColor whiteColor];/*1.重写了控制器的loadView方法,则根据重写的loadView方法创建MJViewController *vc = [[MJViewController alloc] init];*//*2.如果通过storyboard创建, 会创建箭头指向view做为控制器的veiwUIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];MJViewController *vc = [storyboard instantiateInitialViewController];*//*3.如果通过xib创建, 会创建xib中描述的veiw做为控制器的veiwMJViewController *vc = [[MJViewController alloc] initWithNibName:@"xibName" bundle:nil];*//*4.如果通过控制器alloc init方法创建,底层会调用initWithNibName:bundle:如果有同名去掉Controller的xib(MJView),会自动该xib中描述的view做为控制器的veiwMJViewController *vc = [[MJViewController alloc] init];*//*5.如果有有同名的xib(MJViewController), 会自动找到该xib的view做为控制器的viewMJViewController *vc = [[MJViewController alloc] init];*/// 6.如果没有xib和storyboard相关文件, 会自动创建一个空白的view做为控制器的veiwMJViewController *vc = [[MJViewController alloc] init];// 设置控制器为window的根控制器// 默认控制器的view颜色是[UIColor clear] ,即几乎透明self.window.rootViewController = vc;// 显示window[self.window makeKeyAndVisible];return YES;}@end

