第1章 第一个简单的iOS应用 1
1.1 创建Xcode项目 2
1.2 模型-视图-控制器 5
1.3 设计Quiz 6
1.4 Interface Builder 7
1.5 创建界面 8
创建视图对象 9
设置视图对象 11
在模拟器上运行 12
Auto Layout简介 13
创建关联 16
1.6 创建模型对象 21
实现动作方法 22
加载第一个问题 22
1.7 编译完成的应用 23
1.8 应用图标 24
1.9 启动画面 26
第2章 Swift语言 27
2.1 Swift的数据类型 27
2.2 使用标准类型 28
推断类型 30
指定类型 30
字面量和角标 32
构造器 33
属性 34
实例方法 34
2.3 可选 35
字典角标 37
2.4 循环和字符串补全 37
2.5 枚举和Switch 38
枚举和初始值 39
2.6 查阅Apple的Swift文档 40
第3章 视图与视图层次结构 41
3.1 视图基础 41
3.2 视图层次结构 42
3.3 创建新项目 43
3.4 视图及Frame 44
自定义标签 51
3.5 自动布局系统 53
对齐矩形与布局属性 54
约束 55
通过Interface Builder添加约束 57
内部内容大小 58
视图位置错误 60
添加更多约束 61
3.6 初级练习:更多自动布局练习 62
第4章 文本输入与委托 63
4.1 文本编辑 63
键盘属性 66
响应UITextField文字改变事件 67
隐藏键盘 70
4.2 实现温度转换 71
数字格式化 73
4.3 委托 74
实现协议 75
使用委托 75
更多协议 77
4.3 初级练习:禁止输入字母 77
第5章 视图控制器 79
5.1 视图控制器的视图 80
5.2 设置初始视图控制器 80
5.3 UITabBarController 83
UITabBarItem 85
5.4 加载以及展示视图 87
访问子视图 89
5.5 与视图控制器及其视图交互 89
5.6 中级练习:夜间模式 90
5.7 深入学习:高清显示 90
第6章 用代码实现视图 93
6.1 使用代码创建视图 94
6.2 代码实现约束 95
锚点 96
激活约束 97
LayoutGuides 98
边距 99
约束的细节 100
6.3 代码实现事件 101
6.4 初级练习:再添加一个Tab 102
6.5 中级练习:显示用户位置 103
6.6 高级练习:显示地图大头针 103
6.7 深入学习:NSAutoresizingMaskLayoutConstraint 103
第7章 本地化 105
7.1 国际化 106
格式化 106
基础国际化 109
准备本地化 110
7.2 本地化 114
NSLocalizedString以及字符串表 117
7.3 初级练习:增加另外一种语言的本地化 120
7.4 深入学习:Bundle在国际化中扮演的角色 120
7.5 深入学习:导入和导出XLIFF文件 121
第8章 控制动画 123
8.1 基础动画 124
闭包 124
8.2 另一个标签 126
8.3 动画完成 129
8.4 对约束作动画 129
8.5 时间方法 133
8.6 初级练习:Spring动画 135
8.7 中级练习:Layout Guides 135
第9章 调试 137
9.1 Buggy项目 137
9.2 调试基础 139
解读控制台信息 139
修复第一个问题 141
原始调试 142
9.3 Xcode的调试器:LLDB 144
设置断点 145
单步调试代码 146
LLDB控制台 153
第10章 UITableView与UITableViewController 155
10.1 编写Homepwner应用 156
10.2 UITableViewController 157
创建UITableViewController子类 158
10.3 创建Item类 159
自定义构造方法 160
10.4 UITableView数据源 161
让控制器访问ItemStore 163
实现数据源方法 165
10.5 UITableViewCells 166
创建并获取UITableViewCell 167
重用UITableViewCell 169
10.6 内容缩进 171
10.7 初级练习:多个分组 172
10.8 中级练习:固定的行 173
10.9 高级练习:自定义UITableView 173
第11章 编辑UITableView 175
11.1 编辑模式 175
11.2 添加行 179
11.3 删除行 181
11.4 移动行 182
11.5 显示弹窗 183
11.6 设计模式 186
11.7 初级练习:修改删除按钮的标题 187
11.8 中级练习:禁止调整顺序 187
11.9 高级练习:真正地禁止调整顺序 187
第12章 创建UITableViewCell子类 189
12.1 创建ItemCell 190
12.2 添加并关联ItemCell的属性 191
12.3 使用ItemCell 192
12.4 动态计算Cell高度 194
12.5 动态类型 194
响应用户的修改 196
12.6 初级练习:UITableViewCell的颜色 197
第13章 UIStackView 199
13.1 使用UIStackView 200
隐藏的约束 200
内容变多优先级 201
内容变少优先级 202
UIStackView的分配 202
嵌套的UIStackView 203
UIStackView间距 204
13.2 Segues 205
13.3 绑定内容 206
13.4 传递数据 211
13.5 初级练习:更多的UIStackView 212
第14章 UINavigationController 213
14.1 UINavigationController 214
14.2 使用UINavigationController导航 218
14.3 视图的出现和消失 218
14.4 隐藏键盘 219
事件处理基础 220
点击回车键来收起键盘 221
点击任意位置隐藏 221
14.5 UINavigationBar 223
在UINavigationBar上添加按钮 225
14.6 初级练习:显示数字键盘 228
14.7 中级练习:自定义UITextField 228
14.8 高级练习:添加更多UIViewController 228
第15章 相机 229
15.1 通过UIImageView对象显示图片 230
添加相机按钮 232
15.2 通过UIImagePickerController拍摄照片 234
设置UIImagePickerController对象的源 235
设置UIImagePickerController对象的委托 236
以模态的形式显示UIImagePickerController对象 237
权限 237
保存图片 240
15.3 创建ImageStore 240
15.4 让UIViewController可以访问ImageStore 242
15.5 创建并使用键 243
15.6 使用ImageStore 245
15.7 初级练习:编辑图片 246
15.8 中级练习:删除图片 246
15.9 高级练习:Camera Overlay 246
15.10 深入学习:导航实现文件 246
//MARK: 247
第16章 保存、读取与应用状态 249
16.1 固化 250
16.2 应用沙盒 252
创建文件URL 253
16.3 NSKeyedArchiver与NSKeyedUnarchiver 254
加载文件 257
16.4 应用状态与状态切换 257
16.5 通过NSData将数据写入文件 260
16.6 错误处理 263
16.7 初级练习:PNG 265
16.8 深入学习:应用状态切换 265
16.9 深入学习:文件系统读/写 266
16.10 深入学习:应用程序包 268
第17章 Size Classes 271
17.1 为特定的Size Classes定制界面 272
17.2 初级练习:垂直排列UITextField和UILabel 276
第18章 触摸事件和UIResponder 277
18.1 触摸事件 277
18.2 创建TouchTracker应用 279
18.3 创建Line结构体 280
结构体 281
值类型和指针类型对比 281
18.4 创建DrawView 281
18.5 使用DrawView画图 282
18.6 处理触摸事件并绘制线条 283
处理多点触摸 284
18.7 @IBInspectable 288
18.8 中级练习:颜色 290
18.9 高级练习:圆圈 290
18.10 深入学习:响应对象链 290
18.11 深入学习:UIControl 291
第19章 UIGestureRecognizer与UIMenuController 293
19.1 UIGestureRecognizer子类 294
19.2 使用UITapGestureRecognizer检测点击 294
19.3 多个UIGestureRecognizer 296
19.4 UIMenuController 299
19.5 更多UIGestureRecognizer 301
UIPanGestureRecognizer与同时识别 302
19.6 深入学习UIGestureRecognizer 306
19.7 中级练习:神奇的线条 307
19.8 高级练习:速度和大小 307
19.9 终极练习:颜色 307
19.10 深入学习:UIMenuController与UIResponderStandardEdit?ctions 308
第20章 网络服务 309
20.1 开始Photorama应用 310
20.2 创建URL 312
URL和请求格式 312
URLComponents 313
20.3 发送请求 316
URLSession 317
20.4 创建Photo模型 320
20.5 JSON数据 320
JSONSerialization 321
枚举和相关值 322
解析JSON数据 323
20.6 下载并显示图片数据 328
20.7 主线程 331
20.8 初级练习:打印返回信息 332
20.9 中级练习:从Flickr获取最新照片 332
20.10 深入学习:HTTP 333
第21章 UICollectionView 335
21.1 显示网格 336
21.2 UICollectionView数据源 338
21.3 自定义布局 341
21.4 创建自定义的UICollectionViewCell 343
21.5 下载照片数据 347
扩展 350
照片缓存 352
21.6 查看照片 353
21.7 中级练习:改变Item的尺寸 356
21.8 高级练习:自定义布局 356
第22章 Core Data 357
22.1 对象图 357
22.2 实体 358
模型实体 358
可变属性 360
NSManagedObject和它的子类 360
22.3 NSPersistentContainer 362
22.4 更新数据 363
插入数据 363
保存修改 365
22.5 更新数据源 365
NSFetchRequest和NSPredicate 365
22.6 初级练习:照片查看次数 369
22.7 深入学习:Core Data Stack 369
NSManagedObjectModel 369
NSPersistentStoreCoordinator 369
NSManagedObjectContext 370
第23章 Core Data关系 371
23.1 关系 372
23.2 在界面中添加标签 374
23.3 后台任务 383
23.4 中级练习:收藏 387
第24章 辅助功能 389
24.1 旁白 389
测试旁白 390
在Photorama中使用辅助功能 392
第25章 后记 397
25.1 接下来做什么 397
25.2 关注我们 398
索引 399