应用程序的控制器
来源:互联网 发布:linux mkfifo 编辑:程序博客网 时间:2024/06/04 18:22
应用程序启动原理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; ViewController *vc = [[ViewController alloc] init]; self.window.rootViewController = vc; [self.window makeKeyAndVisible]; return YES;}
纯代码创建应用程序
目标
- 掌握纯代码创建应用程序的过程
纯代码创建 App 的写法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; ViewController *vc = [[ViewController alloc] init]; self.window.rootViewController = vc; [self.window makeKeyAndVisible]; return YES;}
演练
- 新建项目
- 删除
Main.storyboard
- 修改应用程序入口,删除
Main.storyboard
运行程序
不报错,但是黑乎乎一片
- 在
AppDelegate
的application:didFinishLaunchingWithOptions:
方法中增加断点
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 断点位置 return YES;}
po self.window
当不通过故事板
启动程序时self.window
对象不会被创建
- 在此方法中创建 window 并且指定背景颜色
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. 常见 window 对象 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; return YES;}
运行测试,仍然黑乎乎一片
回顾故事板启动过程 —— 让
window
在屏幕可见
- 修改方法,让窗口可见
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. 常见 window 对象 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; // 3. 让 window 变成主窗口并且可见 [self.window makeKeyAndVisible]; return YES;}
运行测试,崩溃,提示信息如下:
Application windows are expected to have a root view controller at the end of application launch
应用程序窗口,在程序启动完成前,期望有一个根视图控制器
- 导入头文件
#import "ViewController.h"
- 设置根控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. 常见 window 对象 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; // 2. 设置根控制器 // 1> 创建控制器 ViewController *vc = [[ViewController alloc] init]; // 2> 让视图控制器成为根控制器 self.window.rootViewController = vc; // 3. 让 window 变成主窗口并且可见 [self.window makeKeyAndVisible]; return YES;}
注意细节:
- 没有设置 vc 的根视图的大小
- 设置的是
window
的大小
实验一
- 在
ViewController
的viewDidLoad
方法中设置根视图背景颜色
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor orangeColor];}
运行测试,并且旋转屏幕,会发现视图控制器的大小会自动适应
这是因为设置了 UIWindow 的根控制器之后,在设备方向旋转时,UIWindow 会通知视图控制器调整根视图大小
将模拟器切换到慢速动画可以观察动画效果
实验二
取消 window 的大小设置
self.window = [[UIWindow alloc] initWithFrame:CGRectZero];
- 新版本的写法
self.window = [[UIWindow alloc] init];
系统底层会自动调整 window 大小,知道就好,建议仍然使用
[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]
的写法
视图控制器和视图关系
- 视图控制器和视图的关系示意图:
关系
- 每一个视图控制器都有一个根视图(强引用)
根据视图所要显示的内容,可以在根视图上添加若干个小视图,分别负责不同区域的显示
- 在 IB 中直接拖拽一个子视图到视图中,视图层次关系支持嵌套
- 在代码中通过
addSubView
方法给视图添加子视图
无论用何种方式添加的子视图,都记录在其父视图的
subviews
数组中NSArray
会对内部对象强引用
为什么要自定义
类
?- 系统默认提供了很多类供程序员使用
- 当系统提供的类无法满足程序员需要时,可以定义这个类的子类
- 在子类中增加自己需要的
属性
和方法
- 子类继承了父类定义的特性(属性和方法),同时又拥有自己定义的
属性
和方法
使用自定义类的结果
- 控制器的子类能够
按照程序员的需求
调度 - 视图的子类能够
按照程序员的需求
显示
- 控制器的子类能够
类和对象
类
是对对象
的抽象- 类是抽象的,不占用内存
- 类是用于创建对象的蓝图
- 是定义包括在
特定类型
的对象
中的方法
和属性
的软件模板 - 在 OC 中,
类
是一种特殊类型的对象
对象
是类
的具体实例- 而对象是具体的,占用存储空间
- 同一个类的对象,具有相同的方法,具有不同的属性
0 0
- 应用程序的控制器
- 18 i2c控制器之应用程序的调用
- 一百、创建 基于页面视图控制器的应用程序
- iOS开发学习之导航控制器和应用程序的生命周期
- iOS 在视图控制器里面判断 应用程序的前台
- iOS个人整理05-应用程序的启动流程--视图控制器ViewController的加载过程--MVC架构
- 63 linux内核的SPI设备驱动模型及应用程序调用SPI控制器的方法
- 【翻译】在Ext JS应用程序中构建可维护的控制器
- UI day 3 UIApplication应用程序的执行顺序 自定义视图 视图控制器
- 使用 MicroPython 快速开发基于实时微控制器的应用程序---凯利讯半导体
- 使用 MicroPython 快速开发基于实时微控制器的应用程序---凯利讯半导体
- 控制器添加控制器的view的方法
- 控制器相关(控制器的创建 跳转 导航控制器 等)
- Yii控制器调用其他控制器的方法
- 获取当前视图控制器present的控制器
- 如何区分控制器的上一个控制器
- 控制器及控制器视图的创建
- iOS 获取当前控制器的顶层控制器
- Linux文件权限
- 关于response.setContentType("text/html; charset=UTF-8");乱码问题
- 完整的HTTP请求与响应(图解)
- jquery 动态载入页面,并且保证 url 变动
- Bitmap裁剪问题
- 应用程序的控制器
- 蓝桥杯-历届试题-矩阵翻硬币-大数
- 数据库水平切分的实现原理解析(分库,分表,主从,集群,负载均衡器)
- bower入门
- 做外贸要收款,哪些是没有拒付、效果比较好的?
- 网络爬虫--数据处理,jsoup工具解析html,dom4j解析xml
- 你值得拥有:25个Linux性能监控工具
- 原生二维码扫描实现, 二维码、中间带小图标、条形码生成
- 常用的几个开源 API网关管理系统