第1章 开始 1
1.1 iOS概述 1
1.1.1 iOS介绍 1
1.1.2 iOS 8新特性 1
1.2 开发环境及开发工具 2
1.3 本书约定 4
1.3.1 实例代码约定 4
1.3.2 图示约定 7
1.3.3 方法命名约定 9
1.3.4 构造器命名约定 11
1.4 创建He11oiOS工程 11
1.4.1 创建工程 12
1.4.2 Xcode中的iOS工程模板 16
1.4.3 应用剖析 17
1.4.4 应用生命周期 20
1.4.5 Xcode中的Project和Target 26
1.4.6 常用的产品属性 28
1.5 iOS API简介 30
1.5.1 API概述 30
1.5.2 如何使用API帮助 33
1.6 小结 34
第2章 Cocoa Touch MVC设计模式 36
2.1 MVC模式 36
2.1.1 MVC模式概述 36
2.1.2 Cocoa Touch MVC模式 37
2.2 视图控制器 40
2.2.1 视图控制器种类 40
2.2.2 视图控制器生命周期 40
2.3 视图与UIView 42
2.3.1 UIView继承层次结构 42
2.3.2 视图分类 44
2.3.3 应用界面的构建层次 45
2.4 界面构建技术 46
2.4.1 使用故事板 46
2.4.2 使用Xib文件 48
2.4.3 使用代码 52
2.5 小结 53
第3章 视图 54
3.1 控件与动作事件 54
3.1.1 按钮 55
3.1.2 定义动作事件 56
3.2 视图与输出口 59
3.2.1 标签 59
3.2.2 定义输出口 60
3.3 视图与委托协议 61
3.3.1 委托设计模式 61
3.3.2 实例:TextField委托协议 62
3.3.3 键盘的打开和关闭 66
3.3.4 键盘的种类 67
3.4 关闭和打开键盘通知 68
3.4.1 通知机制 68
3.4.2 实例:关闭和打开键盘 69
3.5 Web视图 70
3.5.1 UIWebView类 70
3.5.2 WKWebView类 74
3.6 警告框 76
3.7 操作表 78
3.8 工具栏 80
3.9 导航栏 84
3.10 小结 87
第4章 表视图 88
4.1 表视图中概念 88
4.1.1 表视图组成 88
4.1.2 表视图相关类 89
4.1.3 表视图分类 90
4.1.4 单元格组成和样式 91
4.1.5 数据源协议与委托协议 93
4.2 简单表视图 94
4.2.1 创建简单表视图 94
4.2.2 自定义单元格 100
4.2.3 添加搜索栏 104
4.3 分节表视图 111
4.3.1 添加索引 111
4.3.2 分组 114
4.4 删除和插入单元格 115
4.5 小结 123
第5章 界面布局与Auto Layout技术 124
5.1 iOS界面布局UI设计模式 124
5.2 静态表与表单布局 126
5.3 集合视图 131
5.3.1 集合视图介绍 131
5.3.2 实例:奥运会比赛项目 132
5.3.3 添加集合视图控制 133
5.3.4 添加集合视图单元格 136
5.3.5 数据源协议与委托协议 140
5.4 Auto Layout布局 141
5.4.1 Auto Layout约束管理 141
5.4.2 实例:Auto Layout布局 141
5.5 小结 147
第6章 屏幕适配与Size Class技术 148
6.1 iOS屏幕 148
6.1.1 iOS屏幕介绍 148
6.1.2 iOS的三种分辨率 149
6.1.3 判断iPhone屏幕尺寸 150
6.2 Size Class技术 152
6.2.1 Interface Builder中使用Size Class 152
6.2.2 Size Class的九宫格 152
6.2.3 实例:使用Size Class 154
6.3 小结 159
第7章 应用导航模式 160
7.1 导航概述 160
7.2 导航的“死胡同”——模态窗口 161
7.3 平铺导航 169
7.3.1 平铺导航概述 169
7.3.2 使用资源目录管理图片 171
7.3.3 屏幕滚动视图重要的属性 174
7.3.4 分屏导航实现 176
7.4 标签导航 179
7.4.1 标签导航实例 180
7.4.2 标签导航实现 180
7.5 树形结构导航 184
7.5.1 树形结构导航实例 184
7.5.2 树形结构导航实现 186
7.6 组合使用导航模式 193
7.6.1 组合导航实例 194
7.6.2 组合导航实现 194
7.7 小结 202
第8章 手势识别 203
8.1 手势种类 203
8.2 使用手势识别器 205
8.2.1 视图对象与手势识别 205
8.2.2 手势识别状态 206
8.2.3 检测Tap(单击) 206
8.2.4 检测Long Press(长按) 216
8.2.5 检测Pan(平移) 219
8.2.6 检测Swipe(滑动) 222
8.2.7 检测Rotation(旋转) 226
8.2.8 检测Pinch(手指的合拢和张开) 229
8.2.9 检测Screen Edge Pan(屏幕边缘平移) 232
8.3 触摸事件与手势识别 233
8.3.1 事件处理机制 234
8.3.2 响应者对象与响应链 234
8.3.3 触摸事件 236
8.3.4 手势识别 241
本章小结 244
第9章 项目实战——编写自定义控件PopupControl 245
9.1 选择器 245
9.1.1 日期选择器 245
9.1.2 普通选择器 248
9.1.3 数据源协议与委托协议 252
9.2 自己的选择器 253
9.2.1 自定义选择器控件需求 254
9.2.2 静态链接库 254
9.2.3 框架 255
9.2.4 使用工作空间 256
9.3 实现自定义选择器 256
9.3.1 创建框架工程 256
9.3.2 创建自定义选择器控制器 256
9.3.3 使用Xib构建界面 258
9.3.4 编写选择器控制器委托协议代码 260
9.3.5 编写选择器控制器代码 260
9.4 实现自定义日期选择器 263
9.4.1 创建自定义日期选择器控制器 263
9.4.2 使用Xib构建界面 263
9.4.3 编写日期选择器控制器委托协议代码 264
9.4.4 编写日期选择器控制器代码 264
9.5 测试自定义控件 265
9.5.1 创建工作空间 265
9.5.2 测试程序工程 266
9.6 小结 269
第10章 音频和视频多媒体开发 270
10.1 音频开发 270
10.1.1 音频文件简介 270
10.1.2 音频API简介 271
10.1.3 音频播放 272
10.1.4 音频录制 276
10.2 视频开发 282
10.2.1 视频文件简介 282
10.2.2 视频播放 283
10.2.3 视频录制 290
本章小结 293
第11章 图形图像开发 294
11.1 使用图像 295
11.1.1 创建图像 295
11.1.2 实例:从设备图片库选取或从照相机抓取 300
11.2 使用Core Image框架 304
11.2.1 Core Image框架API 304
11.2.2 滤镜 306
11.2.3 实例:旧色调和高斯模糊滤镜 306
本章小结 310
第12章 数据存储 311
12.1 数据存储概述 311
12.1.1 沙箱目录 311
12.1.2 数据存储方式 312
12.2 分层架构设计 313
12.2.1 低耦合企业级系统架构设计 313
12.2.2 iOS分层架构设计 314
12.3 实例:MyNotes应用 315
12.3.1 采用纯Swift语言实现 317
12.3.2 采用Swift调用Objective-C混合搭配实现 321
12.4 属性列表 322
12.5 使用SQLite数据库 327
12.5.1 SQLite数据类型 328
12.5.2 创建数据库 328
12.5.3 查询数据 331
12.5.4 修改数据 334
12.6 小结 337
第13章 网络数据交换格式 338
13.1 XML数据交换格式 339
13.1.1 XML文档结构 340
13.1.2 XML文档解析与框架性能 341
13.1.3 实例:MyNotes应用XML 342
13.2 JSON数据交换格式 352
13.2.1 JSON文档结构 352
13.2.2 JSON数据编码/解码与框架性能 353
13.2.3 实例:MyNotes应用JSON解码 354
13.3 小结 356
第14章 REST Web Service 357
14.1 REST Web Service通信技术基础 357
14.1.1 HTTP协议 358
14.1.2 HTTPS协议 358
14.2 使用苹果网络请求API 358
14.2.1 同步请求方法 359
14.2.2 异步请求方法 362
14.2.3 实例:MyNotes插入、修改和删除功能实现 364
14.3 实例:改善MyNotes用户体验 371
14.3.1 使用下拉刷新控件 371
14.3.2 使用网络活动指示器 374
14.4 使用网络请求框架MKNetworkKit 376
14.4.1 安装和配置MKNetworkKit框架 376
14.4.2 实现GET请求 378
14.4.3 实现POST请求 379
14.4.4 下载数据 380
14.4.5 上传数据 383
14.5 小结 385
第15章 Web Service网络通信架构设计 386
15.1 iOS Web Service网络通信应用的分层架构设计 386
15.2 基于委托模式实现 387
15.2.1 网络通信与委托模式 387
15.2.2 使用委托模式实现分层架构设计 387
15.2.3 类图 388
15.2.4 时序图 390
15.2.5 数据持久层重构 393
15.2.6 业务逻辑层的代码实现 397
15.2.7 表示层的代码实现 400
15.3 基于观察者模式的通知机制实现 406
15.3.1 观察者模式的通知机制回顾 406
15.3.2 异步网络通信中通知机制的分层架构设计 406
15.3.3 类图 407
15.3.4 时序图 409
15.3.5 数据持久层的重构 412
15.3.6 业务逻辑层的代码实现 414
15.3.7 表示层的代码实现 416
15.4 小结 421
第16章 iOS敏捷开发项目实战——价格线酒店预订iPhone客户端开发 422
16.1 应用分析与设计 422
16.1.1 应用概述 422
16.1.2 需求分析 422
16.1.3 原型设计 424
16.1.4 架构设计 424
16.2 iOS敏捷开发 426
16.2.1 敏捷开发宣言 426
16.2.2 iOS可以敏捷开发? 427
16.2.3 iOS敏捷开发一般过程 427
16.3 任务1:创建工作空间 429
16.4 任务2:业务逻辑层开发 430
16.4.1 迭代2.1编写搜索酒店的业务逻辑层类 431
16.4.2 迭代2.2编写房间查询业务逻辑类 436
16.5 任务3:表示层开发 442
16.5.1 迭代3.1根据原型设计初步设计故事板 442
16.5.2 迭代3.2搜索酒店模块 444
16.5.3 迭代3.2.1选择城市视图控制器 445
16.5.4 迭代3.2.2选择关键字视图控制器 448
16.5.5 迭代3.2.3选择价格和日期选择器 451
16.5.6 迭代3.2.4酒店搜索视图控制器 452
16.5.7 迭代3.2.5酒店搜索列表视图控制器 461
16.5.8 迭代3.3房间查询模块 467
16.6 小结 469