故事板(storyboard)是用来替代xib的技术,也是iOS 5最重要的新特性之一。本节中,我们将用故事板重构HelloWorld。 2.2.1 使用故事板重构HelloWorld 参见2.1节描述的HelloWorld创建过程,我们在图2-3中勾选Use Storyboards复选框。 工程创建完成之后,通过导航进入MainStoryboard.storyboard,界面如图2-12所示。 图2-12 创建故事板工程 添加Label控件的操作与2.1节相同,如图2-13所示。 图2-13 添加Label控件 点击 按钮运行,运行结果与2.1节相同。 2.2.2 nib、xib与故事板 大家一定会发现某些资料上会提到nib文件,那么nib与xib是怎样的一种关系呢? 最初只有nib文件,后来将其更名为xib文件,但大家一直沿袭nib这个叫法(即称xib文件为nib文件),所以到目前为止,nib等同于xib。xib文件采用xml格式。 那么故事板与xib比较,是否只是文件后缀名不同呢?当然不是,一般而言,一个工程中可以有多个xib文件,一个xib文件对应着一个视图控制器和多个视图。而使用故事板时,一个工程只需要一个主故事板文件就可以了。因此,在包含多个视图控制器的情况下,采用故事板管理比较方便,而且故事板还可以描述界面之间的导航关系。 下面我们举例说明故事板的用法。 我们要做这样一个应用:两个不同的界面,有两个标签分别与其对应,点击标签,实现两个界面的互相切换。该应用采用标签栏导航模式,设计原型草图见图2-14。 图2-14 设计原型草图 选择Tabbed Application模板,分别采用xib和故事板文件实现,生成的文件如图2-15和图2-16所示。 图2-15 采用xib构建文件 图2-16 采用故事板构建文件 从图2-15和图2-16中可以看到,采用xib技术时,这两个界面有两个xib文件,而采用故事板时,这两个界面只有一个MainStoryboard.storyboard文件。 打开MainStoryboard.storyboard文件,我们会看到如图2-17所示的设计视图。 图2-17 故事板设计视图 可以看到,该应用包含两个视图,两个视图存在切换关系。事实上,故事板是多个xib文件集合的描述文件,也采用xml格式。 需要特别提出的是,虽然苹果官方主张使用故事板,但我们要根据具体情况、具体问题对故事板和xib做以取舍,而不是一概而论。当应用数据量很大、界面很多、关系很复杂时,如果使用故事板技术,那我们在Interface Builder设计器中的工作就会变得庞大而复杂,并且整个工程的性能也会受到一定影响。 2.2.3 故事板中的Scene和Segue Scene和Segue(参见图2-18)是故事板中非常重要的两个概念。每个视图控制器都会对应一个Scene,Scene翻译为“场景”,可以理解为应用的一个界面或屏幕,在这个屏幕中有很多视图或控件,相当于一个xib。这些Scene之间通过Segue连接,Segue不但定义了Scene之间的跳转(或导航)方式,还体现了Scene之间的关系。跳转的类型分为:Push、Modal、Popover和自定义方式。Scene跳转类型还要跟具体的控制器结合使用。Push是树形导航模式,Modal是模态导航模式,Popover是呈现浮动窗口,这些导航模式我们会在后面介绍。 图2-18 故事板Scene和Segue 除了Scene和Segue以外,故事板中还有关于表视图单元格的一些新东西,我们也将在后面逐一介绍。