1.故事板并不完美,它由一些明显的不足之处。但是故事板是构建用户界面的趋势,以及如何使用故事板来完成用nib文件完成的事情(比如和控制器进行通信)。
2.添加故事板:方式和添加新文件的方式相同。事实上,从Xcode 5开始,就已经默认打开了Use Storyboard选项,这使得从应用删除故事板变得更加困难了。
3.info.plist中的属性:使用故事板创建新工程时,应用的info.plist键中含有一个名为UIMainStoryboardFile的键。这个键取代了iOS5以前使用的NSMainNibFile。如果应用的主窗口是从nib文件而不是从故事板文件加载的,可以继续使用NSMainNibFile。不过,不能在同一个应用中同时使用UIMainStoryboardFile和NSMainNibFile。UIMainStoryboardFile会占先,而NSMainNibFile中指定的nib文件永远不会被加载。
4.实例化故事板
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle*)storyboardBundleOrNil;
- (id)instantiateInitialViewController;
- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
6.联线(Segue)
联线(segue)是故事板文件中定义的切换效果。UIKit提供了两种默认的切换效果:Push和Modal。它们的行为和iOS 5中使用的pushViewController:animated:completion:和presentViewController:animated:completion方法类似。除此之外,我们可以创建自定义联线,创建新的视图控制器之间的切换效果。
在故事板文件中,将视图控制器上的特定事件与其他视图控制器连接来创建联线。可以从按钮拖放到视图控制器上,从手势识别器对象拖放到视图控制器上,等等。IB创建了它们之间的联线,而我们可以选择该联线,并使用特性查看器面板修改其切换风格。
如果选择的是自定义切换风格,特性查看器面板还允许我们设置自定义的类。可以将联线当做连接动作和切换效果的东西。触发联线的动作可以是按钮点击事件、静态表视图上的行选择事件、识别的手势,甚至是音频事件。编译器会自动生成必要的代码,从而在绑定到联线的事件发生时执行联线。
联线执行时会在源视图控制器中调用prepareForSegue:sender:方法,并将一个UIStoryboardSegue类型的对象传给该方法。可以覆盖这个方法将数据传给目标视图控制器。
当一个视图执行多个联线时,每个联线都会调用同样prepareForSegue:sender:方法。为了标识执行过的联线,需要用联线标识符检查已执行的联线是否是想要执行的,并相应的传递数据。依照防御性编程实践,建议总是执行这项检查,即使视图控制器只执行了一个联线。这会保证后面添加新联线时,应用继续运行,而不会崩溃。
6.1.传递数据
6.2.返回数据
6.3.实例化其他视图控制器
6.4.手动进行联线
虽然故事板能够基于动作自动触发联线,但有些情况下仍然需要通过编程实现联线。我们可能需要这么做来处理不能由故事板文件处理的动作。要进行联线,需要调用该视图控制器的performSegueWithIdentifier:sender:方法。手动进行联线时,可以在发送者参数中传递调用者和上下文对象。稍后,这个发送者参数会发送给prepareForSegue:sender:方法。
6.5.展开联线。
7.使用故事板来实现表视图
使用故事板的一个重要优势就是能直接从IB中创建静态表。借助故事板可以构建来两种类型的表视图:不需要特殊类提供数据源的静态表,含有绑定模型中数据的原型单元格的表。
7.1.静态表(Static Table)
静态单元格适用于创建设置界面,比如苹果的设置界面。注意:只能为UITableViewController生成的表视图创建静态单元格,作为UIViewController视图的子视图添加的表视图无法创建。
7.2.原型单元格(Prototype Cells)
注意:如果故事板中的原型单元格没有单元格标识符,Xcode会发出警告。
8.自定义过渡效果
故事板的另一个优势是可以让我们轻松地为视图控制器创建自定义切换效果。
在进行联线时,根据开发者在故事板中设定的切换风格,编译器会生成有关的代码以通知或推送到目标视图控制器。
自定义类:CustomSegue,它继承于UIStoryboardSegue。
自定义过渡举例:设置故事板中的segue为Custom,标记其类为CustomSegue。
在CustomSegue.m中覆盖perform方法:
如下:
9.优点和缺点
优点:合作开发人员(以及客户)可以很容易理解应用的工作流,打开故事板可以看到整个工作流。
缺点:多个开发人员合作时候的合并冲突。