247
10
处理文件和文件类型
目前,这个
iOS
应用可以处理笔记文档的文本内容了,但是还无法处理可能由
OS X
用添加的附件。
本章将为这个
iOS
应用添加附件支持,而且会增强对笔记文档的处理。为此,我们将添
加更多的用户界面(你可能猜到了),用于:
显示附件。
解决多个设备同步导致的冲突。
支持快速查看(
Quick Look
),显示附件的预览图。
10.1
设计附件的界面
首先,我们将更新文档视图控制器的界面,显示附件列表。为此,要做全盘重新设计,
还要用到较为复杂的约束,所以从头开始更简单。
1.
打开
Main.storyboard
2.
把文档视图控制器界面里的文本视图删除。我们将重新设计这个界面,留出空间显
示附件,所以把现有元素都删除,然后再重新编排更简单。
3.
如果没有顶部导航栏,行事更方便。选择文档视图控制器,在
Attributes
Inspector
”中 的“
Simulated Metrics
”区 ,把“
Top Bar
”由“
Inferred
”改 为“
None
(见图
10-1
)。
248
10
10-1
设置顶部导航栏的模式
4.
拖曳一个
UIScrollView
到界面中,以便显示比所在视图长的内容(见图
10-2
)。
这个滚动视图要占满整个屏幕。默认情况下,约束相对于边距和上下两个布局向导。
然而,这里需要滚动的是整个屏幕里的内容,所以要占满全部空间。这意味着,我
们要使用不同的方式添加约束。
5.
选择滚动视图,单击窗口右下角的
Pin
按钮,为滚动视图添加约束。禁用
Constrain
to margins
”,把全部四个数字都设为
0
。把“
Update Frames
”改为“
Items of New
Constraints
”,然后单击“
Add 4 Constraints
”。现在,滚动视图会占满整个屏幕。
接下来,我们要在里面添加控件。具体而言,我们将添加一个叠放视图
stack
view
),其中包含文本编辑器和显示附件列表的集合视图。叠放视图实现横向或纵
向叠放,而且包揽了大多数工作。如果你想把“视图紧挨在一起”,而又不想处理
复杂的布局,就可以使用叠放视图。
虽然只有
UIStackView
这么一个类,但是在对象库中却出现两次,一个针对“纵向
叠放视图”,另一个针对“横向叠放视图”。
处理文件和文件类型
249
10-2
空的文档视图控制器界面
6.
拖曳一个纵向叠放视图到滚动视图中。
7.
选择叠放视图,单击“
Pin
”按钮,把上下左右四边的间距都设为
0
8.
然后,调整叠放视图的尺寸,让它的宽度与滚动视图一样。
9.
按住
Control
键,从叠放视图拖曳到滚动视图。此时会弹出可用的约束列表,选择
Equal Widths
”。
250
10
叠放视图的宽度一定要与滚动视图相等。这样滚动视图不会把叠放视图的宽度挤压
0
10.
在“
Attribute Inspector
中,确保叠放视图的
Alignment
”和“
Distribution
”都 是“
Fill
”。
这样,叠放视图会让子视图的尺寸足够占满叠放视图的整个空间。
11.
拖曳一个
UICollectionView
到叠放视图中。
12.
按住
Control
键,从集合视图拖曳到集合视图自身,从弹出的菜单中选择
Height
”。
13.
选择集合视图的单元格,把尺寸设为
88
×
88
14.
在“
Attributes Inspector
”中把集合视图的背景设为
90%
白色(特别浅的灰色)。
接下来,像前一章一样,添加文本视图。
15.
在叠放视图中添加一个
UITextView
这个视图不需要约束,因为叠放视图会调整它的尺寸和位置。把集合视图的高度设
88
,此外不添加其他约束,这样叠放视图会做两件事:把集合视图放在顶部,占
满屏幕的宽度;让其他视图占满余下的高度。
16.
把文档视图控制器里的
textView
outlet
连接到这个文本视图上。
textView
属性的类型是
UITextView
,因此它只能与文本视图连接。界面构建程序不
会允许你连接其他类型的视图。
17.
按住
Control
键,从文本视图拖曳到大纲里的文档视图控制器上,把文本视图的委托
对象设为文档视图控制器。
18.
选择文本视图,打开“
Attributes Inspector
”。设置文本视图使用属性化文本,禁用
Scrolling En-abled
”,没必要了,因为它就在滚动视图中(见图
10-3
)。

Get Swift学习手册 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.