A.控制器的创建
控制器常见的创建方式有以下几种
通过storyboard创建

直接创建
  1. 1 ViewController *vc = [[ViewController alloc] init];
     xib设置了class后,当xib的文件名跟controller类名一样的时候,用这个方法默认就会加载xib中的controller
 
指定xib文件来创建
  1. 1 ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
 
1.从storyboard中创建
(1)创建一个Empty Application (不带storyboard)
 
(2)创建window并加到screen上
  1. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. 2 // 手动添加window到screen
  3. 3 self.window = [[UIWindow alloc] init];
  4. 4 self.window.frame = [[UIScreen mainScreen] bounds];
  5. 5 self.window.backgroundColor = [UIColor grayColor];
  6. 6 [self.window makeKeyAndVisible];
  7. 7 return YES;
  8. 8 }
 
(3)创建一个storyboard,拖入一个controller
 
 
 
 
 
(4)取出storyboard(其实就是相当于xib)
  1. 1 // 2.取得stroyboard
  2. 2 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"mysb" bundle:nil];
 
(5)设置storyboard上controller为rootViewController
 
 
有两种方式取得storyboard上的controller
a.直接使用入口controller,这个view的背景色是橄榄绿
 
设置storyboard中的ViewController的class为自定义的controller
 
  1. 1 // 3.1直接使用InitialViewController
  2. 2 self.window.rootViewController = [sb instantiateInitialViewController];
 
 
b.使用ID
设置ViewController的class
 
 
再拖入一个ViewController,设置view的背景色是黄色,设置ID是”vc2"
 
  1. 1 // 4.使用ID取得controller, 设置rootViewController
  2. 2 self.window.rootViewController = [sb instantiateViewControllerWithIdentifier:@"vc2"];
 
 
完成的加载过程:
  1. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. 2 // 1.手动添加window到screen
  3. 3 self.window = [[UIWindow alloc] init];
  4. 4 self.window.frame = [[UIScreen mainScreen] bounds];
  5. 5 self.window.backgroundColor = [UIColor grayColor];
  6. 6 [self.window makeKeyAndVisible];
  7. 7
  8. 8 // 2.取得stroyboard
  9. 9 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"mysb" bundle:nil];
  10. 10
  11. 11 // 3.取出storyboar中的controller
  12. 12 // 3.1直接使用InitialViewController
  13. 13 ViewController *controller = [sb instantiateInitialViewController];
  14. 14
  15. 15 // 3.2使用ID
  16. 16 ViewController2 *controller2 = [sb instantiateViewControllerWithIdentifier:@"vc2"];
  17. 17
  18. 18 // 4.设置rootViewController
  19. 19 self.window.rootViewController = controller2;
  20. 20
  21. 21 return YES;
  22. 22 }
 
总结:
1.创建Single View Application的时候,项目会自带一个storyboard,其实就是做了上面的事情
设置了Main storyboard 的文件,就会自动加载storyboard
 
2.不同的controller类负责不同的界面的操作
 
2.直接创建
(不详述)
 
3.指定xib文件创建
在之前没有storyboard的时候使用这种方法
(1)创建一个controller
 
(2)创建一个xib
 
(3)在xib拖入两个view,设置一些特征标识,方便对比
 
(4)设置其中一个view为控制器的view
a.更改 File’s Owner 的class为自定义的controller
 
b.设置controller的view
 
(5)从xib加载controller,并把view显示到window上
  1. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. 2 // 1.手动添加window到screen
  3. 3 self.window = [[UIWindow alloc] init];
  4. 4 self.window.frame = [[UIScreen mainScreen] bounds];
  5. 5 self.window.backgroundColor = [UIColor grayColor];
  6. 6 [self.window makeKeyAndVisible];
  7. 7
  8. 8 // 从xib加载控制器, 设置rootViewController
  9. 9 self.window.rootViewController = [[XibViewController alloc] initWithNibName:@"myx" bundle:nil];
  10. 10
  11. 11 return YES;
  12. 12 }
 
 
总结:
1.storyboard:(这里使用ViewController2为rootViewController)
 
xib:(使用view1作为显示的view)
 
 
B.创建控制器的view
控制器的view创建有多种方式,(按照优先级进行创建,仅使用最优先的方式)
  • loadView代码(controller实现loadView方法)

  • storyboard描述
  • xib
 
 
 

最新版的官方文档:

 
1.通过loadView
(1)创建一个controller、storyboard、xib
 
(2)配置好storyboard和xib的class为自定义的controller
(3)给storyboard和xib的view加上明显的标志
 
 
(4)在controller类中实现loadView(当controller的view是空的时候,就会调用loadView
  1. 1 // 加载view,这是延迟加载,当需要使用view而view是空的时候调用
  2. 2 - (void)loadView {
  3. 3 NSLog(@"loadView...");
  4. 4 self.view = [[UIView alloc] init];
  5. 5 self.view.frame = [[UIScreen mainScreen] bounds];
  6. 6 UILabel *label = [[UILabel alloc] init];
  7. 7 label.frame = CGRectMake(40, 40, 100, 100);
  8. 8 label.text = @"loadView";
  9. 9 [self.view addSubview:label];
  10. 10 }
 
(5)在delegate中配置controller到window上
a.配置storyboard的controller为rootViewController
  1. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. 2 // 配置window
  3. 3 self.window = [[UIWindow alloc] init];
  4. 4 self.window.frame = [[UIScreen mainScreen] bounds];
  5. 5 self.window.backgroundColor = [UIColor grayColor];
  6. 6
  7. 7 // 配置storyboard中的controller为rootViewController
  8. 8 self.window.rootViewController = [[UIStoryboard storyboardWithName:@"test" bundle:nil] instantiateInitialViewController];
  9. 9
  10. 10 // 配置xib中的controller为rootViewController,主要要使用带有loadView的controller
  11. 11 // self.window.rootViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
  12. 12
  13. 13 // 显示window
  14. 14 [self.window makeKeyAndVisible];
  15. 15 return YES;
  16. 16 }
  17. 17
会发现没有起作用
 
b.同样,使用xib中的controller为rootViewController,只要loadView存在,也不会起作用
  1. 1 // 配置xib中的controller为rootViewController,主要要使用带有loadView的controller
  2. 2 self.window.rootViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
 
总结:
在配置rootViewController的时候,如果配置的controller中实现了loadView方法,就会覆盖storyboard或xib中的view
 
 
 
 

[iOS基础控件 - 6.11.1] - 控制器 & 控制器view的更多相关文章

  1. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  2. [iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用

    A.概念 1.通常一个app有多个控制器 2.需要对这些控制器进行管理 3.有多个view的时候,用一个父view去管理多个子view 4.控制器管理也是如此,使用给一个父控制器,去控制子控制器   ...

  3. [iOS基础控件 - 6.11.4] storyboard 的 Segue

    A.概念 storyboard中的跳转事件连线,都是一个UIStoryboardSegue对象(Segue)   来源控制器      触发控制器 目标控制器      跳转到的控制器     Seg ...

  4. [iOS基础控件 - 6.11.5] 沙盒 & 数据存储

    A.沙盒 每个APP都有一个沙盒,是独立存在的   1.Xcode5和Xcode6的模拟器文件目录 a.模拟器路径改版 (1)Xcode5中模拟器路径为:/Users/用户名/Library/Appl ...

  5. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  6. [iOS基础控件 - 6.12.3] @property属性 strong weak copy

    A.概念 @property 的修饰词   strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign)   默认情况所有指针都是强指针 ...

  7. [iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理

    A.需求 1.类似QQ.微信顶部或者底部的窗口转换导航条 2.给每个页面添加相应内容   B.UITabBarController 1.基本概念: (1)内容高度 iOS7之前内容高度为:屏幕高度 - ...

  8. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  9. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

随机推荐

  1. Xmanager Enterprise Linking VM Redhat Linux AS4.7 X64–Server Configuration

      [root@localhost ~]# vi /etc/inittab ## inittab       This file describes how the INIT process shou ...

  2. [LeetCode#267] Palindrome Permutation II

    Problem: Given a string s, return all the palindromic permutations (without duplicates) of it. Retur ...

  3. poj 1191 棋盘分割(dp + 记忆化搜索)

    题目:http://poj.org/problem?id=1191 黑书116页的例题 将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方. 可以看出来 方差只与 每一块的和的平方 ...

  4. Android的计量单位px,in,mm,pt,dp,dip,sp

    android中dip.dp.px.sp和屏幕密度 1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持 ...

  5. UVa 10375 (唯一分解定理) Choose and divide

    题意: 求组合数C(p, q) / C(r, s)结果保留5为小数. 分析: 先用筛法求出10000以内的质数,然后计算每个素数对应的指数,最后再根据指数计算答案. #include <cstd ...

  6. rsync不存在用户处理CPU消耗拒绝服务漏洞

    受影响产品: rsync 3.1.0 漏洞描述: CVE ID:CVE-2014-2855 rsync是一款文件同步管理软件. rsync处理不存在用户时存在安全漏洞,可消耗大量CPU资源,造成拒绝服 ...

  7. 获取资源ID

    比如,设置一张gif图片的宽高 gif.setShowDimension((int) CommonUtil.getDimen(R.dimen.gif), (int) CommonUtil.getDim ...

  8. TS数据结构分析

    1.TS包得数据结构 2. // Transport packet headertypedef struct TS_packet_header{    unsigned sync_byte       ...

  9. session服务器Nginx+Tomcat+Memcached集群Session共享

    cookie是怎样工作的? 例如,我们创立了一个名字为login的Cookie来包含访问者的信息,创立Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是“Michael Jor ...

  10. Asp.net 将DataTable 或者DataSet 转换为Json 格式

    Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...