from: http://leopard168.blog.163.com/blog/static/1684718442011111713711529/
Storyboard 有时也称为 Storyboarding,二者经常混用。 如果你的英文足够好,也许能体会到二者的细微差别。
在谈及Storyboard之前,我们先来了解下 Interface builder 的背景。 Interface Builder 简称 IB,是XCode 开发环境自带的 用户图形界面设计工具, 通过它,你可以随心所欲地将 控件或对象(Object)拖拽到 视图中。 这些控件被存储在一个 XIB (发音为 zib) 或NIB 文件中。 XIB 很容易理解, 说白了, XIB文件就是一个 XML 格式的文件, 你可以通过编辑工具打开改写这个Xib 文件。 当程序编译时, 这些视图控件被编译成一个NIB 文件。
我们先来对NIB有一个基本的认识。通常,NIB是与ViewController相关联的,很多ViewController都有对应的NIB文件。NIB文件的作用是描述用户界面、初始化界面元素对象。 其实,开发者在NIB中所描述的界面和初始化的对象 都能够在代码中实现。之所以用Interface Builder 来绘制页面,是为了减少那些设置界面属性的重复而枯燥的代码,让开发者能够集中在功能的实现上。
在XCode 4.2 之前, 每创建一个视图,就要生成一个相应的XIB 文件。 当一个应用有多个视图时,视图之间的跳转管理将变得十分复杂。 为解决这个问题, Apple 推出的 Storyboard 可谓及时而实用。 看看Apple对Storyboard的评论吧:
"Discover how Xcode's Interface Builder support for Storyboarding in iOS 5 makes designing your iOS apps so much easier. Storyboarding allows you to graphically arrange all your views within a single design canvas, where you can then define the app's logical flow, and even assign transition animations."
NIB文件无法描述从一个ViewController到另一个ViewController的跳转,这种跳转只能靠手写代码来实现。相信很多人都会经常用到 -presentModalViewController:animated: 以及 -pushViewController:animated: 这两个方法。 Storyboarding 的出现,使得这种方式成为历史,取而代之的是 Segue [Segwei]。 Segue 定义了从一个ViewController 到另一个ViewController的跳转。我们在 IB 中,已熟悉如何连接见面元素对象和方法 (Action Method)。 在Stroyboard中,我们完全可以通过Segue,将ViewController 连接起来,而不再需要手写代码了。 如果你想自定义 Segue,你也只需写 Segue 的实现,而无需编写调用的代码, Storyboard 会自动调用。
要用好Storyboard机制,必须严格遵守MVC原则。 View 与 Controller 需完全解耦,并且不同的Controller 之间也要充分解耦。
在开发iOS 应用程序时,创建一个视图(View),有两种实现方法, 一是在Interface Builder 中,拖拽一个UIView控件, 另一种方法是通过原生代码方式。两种方法各有利弊。 IB 方式看似简单,但在View 之间跳转时,不便操控; 而原生代码(这种纯手写代码)方式,代码工作量巨大。 哪怕仅仅创建几个Label,就得手写上百行代码,每个Label 都得设置坐标。 为解决以上问题,Apple 近期发布的 iOS5 新增 Storyboard 功能。
Storyboard 是什么东东? 简单来说,Storyboard是Xcode 4.2 自带的工具, 主要用于iOS5 以上版本。 早期的InterfaceBuilder 所创建的 View , 各个View之间是互相独立的,没有相互关联,当一个应用程序有多个View 时, View 之间的跳转很是复杂。为此Apple 为开发者带来了福音—Storyboard。尤其是使用导航栏和标签栏的应用, Storyboard 大大简化了各个视图之间的切换, 并由此简化了管理视图控制器的开发过程,我们完全可以指定视图的切换顺序,而不用手工编写代码。
Storyboard 能够包含一个程序的所有的ViewController 以及它们之间的连接。在应用开发时,可将UI Flow作为Storyboard 的输入,一个看似完整的UI在Storyboard唾手可得。