[关闭]
@chenbinghua 2015-09-12T10:32:51.000000Z 字数 1787 阅读 1473

iOS开发之控制器的View

iOS笔记


loadView方法

控制器通过loadView方法加载自己的view

当需要自定义控制器View时,可以重写控制器的loadView方法

  1. // loadView在第一次使用控制器的view的时候调用,即控制器的view是懒加载的
  2. - (void)loadView
  3. {
  4. // 自定义控制器View时,不要调用[super loadView]
  5. self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
  6. self.view.backgroundColor = [UIColor purpleColor];
  7. }
  1. // 注意:在这个方法中是错误的,如果没有自定义view,就不能获取控制器的view,否则会造成死循环
  2. - (void)loadView
  3. {
  4. self.view.backgroundColor = [UIColor redColor];
  5. }
  6. // 原因是self.view点语法转化成一下方法,造成死循环
  7. - (UIView *)view
  8. {
  9. if (_view == nil) {
  10. [self loadView];
  11. [self viewDidLoad];
  12. }
  13. return _view;
  14. }

loadView方法底层

  1. #import "AppDelegate.h"
  2. #import "MJViewController.h"
  3. @interface AppDelegate ()
  4. @end
  5. @implementation AppDelegate
  6. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  7. // 创建UIWindow
  8. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  9. self.window.backgroundColor = [UIColor whiteColor];
  10. /*
  11. 1.重写了控制器的loadView方法,则根据重写的loadView方法创建
  12. MJViewController *vc = [[MJViewController alloc] init];
  13. */
  14. /*
  15. 2.如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw
  16. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  17. MJViewController *vc = [storyboard instantiateInitialViewController];
  18. */
  19. /*
  20. 3.如果通过xib创建, 会创建xib中描述的veiw做为控制器的veiw
  21. MJViewController *vc = [[MJViewController alloc] initWithNibName:@"xibName" bundle:nil];
  22. */
  23. /*
  24. 4.如果通过控制器alloc init方法创建,底层会调用initWithNibName:bundle:
  25. 如果有同名去掉Controller的xib(MJView),会自动该xib中描述的view做为控制器的veiw
  26. MJViewController *vc = [[MJViewController alloc] init];
  27. */
  28. /*
  29. 5.如果有有同名的xib(MJViewController), 会自动找到该xib的view做为控制器的view
  30. MJViewController *vc = [[MJViewController alloc] init];
  31. */
  32. // 6.如果没有xib和storyboard相关文件, 会自动创建一个空白的view做为控制器的veiw
  33. MJViewController *vc = [[MJViewController alloc] init];
  34. // 设置控制器为window的根控制器
  35. // 默认控制器的view颜色是[UIColor clear] ,即几乎透明
  36. self.window.rootViewController = vc;
  37. // 显示window
  38. [self.window makeKeyAndVisible];
  39. return YES;
  40. }
  41. @end

此处输入图片的描述

控制器view的生命周期

此处输入图片的描述

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注