原文地址:
最新Xcode 4.3.2 下使用Storyboard和ARC开发iPhone4程序 03——Storyboard类及使用作者:浪友dans
http://blog.sina.com.cn/s/blog_5a6efa3301016z4n.html
一、Storyboard类介绍
Storyboard是你可以用来定义用户界面的一种新的方式,像xib。与xib不同的是它可以同时管理多个ViewController,而且可以在Storyboard中配置ViewController 之间的跳转关系。
如果主窗口只有一个view controller是作为story board的第一个界面,就需要勾选上 Initial Scene。
story board是xcode4.2新增的一个特性,它将原有工程中的所有xib文件集成在一起,用拖拽的方式建立起两个viewController之间的跳转关系,使得整个程序的UI跳转逻辑清楚明了。使用storyboard后,界面相关的代码编写将更少。
简单说一个storyboard是个什么东西。storyboard引入了两个概念:
scene: 一个场景,由一个viewController和相关的xib表示
segue: ['seiɡwei] n. 继续,持续。用于连接scenes,segue有多种类型,包括:
Push, Modal, Popover and more
segue 也负责传递数据和返回数据。
整个程序的界面转换就是在scene之间切换。界面跳转关系,比如按哪个键跳到哪个界面,由segue来描述。segue也可以带数据,以便做数据传递。据说苹果的这种设计方案是抄的 Adobe的Flash,具体不得而知。
1、UIStoryboard类
此类继承于NSObject,共有三个方法,一个类方法,两个实例方法
1)得到一个StoryBoard Object对象:类方法
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle*)storyboard
BundleOrNil;
// 也可以通过一个在storyboard中有scene的viewController中用self.storyBoard得到自己所在的storyboard对象。
2)接口
- (id)instantiateInitialViewController;
// 返回第一个界面(根视图所在界面),每个storyboard都必须有一个入口界面,特别是程序的主storyboard的第一个界面,就是程序的主界面。
- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
// storyboard中相应标识对应的界面。如果identifier不存在或者为nil,引发异常。
2、UIStoryboardSegue类,同样此类继承于NSObject
两个界面之间的转换,转换之前调用当前view controller的 prepareForSegue:sender: 函数(这里可以处理一些数据赋值之类).可以通过生成子类来自定义转换动画.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
}
1)属性
@property(nonatomic, readonly) id destinationViewController // (read-only)
@property (nonatomic, readonly) NSString *identifier // (read-only)
@property(nonatomic, readonly) id sourceViewController // (read-only)
2)初始化,此类公有一个实例方法
- (id)initWithIdentifier:(NSString *)identifier source:(UIViewController*)source destination:(UIViewController *)destination;
3、UIStoryboardPopoverSegue类。此类继承于UIStoryboardSegue : NSObject
此类只有一个属性:
@property(nonatomic, retain, readonly) UIPopoverController*popoverController;
4、动画
- (void)perform; // 子类重写来自定义转换动画
@property(nonatomic, retain, readonly) UIPopoverController*popoverController;
二、Storyboard使用
如果你是创建新项目,Xcode模版可以提供一个配置好的Storyboard供你使用。对于其它的应用,使用Storyboard的过程如下:
1、配置应用程序Info.plist文件
· 添加UIMainStoryboardFile ,值为storyboard的文件名。
· 删除原来的NSMainNibFile
2、像以前创建xib文件一样创建一个storyboard文件
3、配置 storyboard中的viewController
三、Storyboard的创建
你可以用InterfaceBuilder 去为你的应用程序创建一个Stroyboard,一般来说一个应用使用一个 Storyboard就够了,但是如果你想创建多个也是可以的,只要你愿意。一个 Stroyboard应该至少含有一个ViewController。
在iPhone中,对于每一个在Storyboard的ViewController都管理着一个scene,每个scene又管理着screen上的东东,但对于iPad来说,多个scene可以同时呈现在一个screen上。你可以从library中拖拽viewController到你的Storyboard上。
当你想关联两个viewController时,你可以按着control键,用鼠标从一个ViewController中的button,table view cell…拖拽连接到另一个你想跳转到的ViewController,这样就创建了一个segue,不要忘记设置identifier哦。
四、 Scene之间的数据传递
当你从当前 scene中触发一个segue的时候,系统会自动调用prepareForSegue:sender:这个方法。如果你想从一个界面切换到里另一个界面的时候传递数据,你应该override这个方法。
五、ViewController之间的跳转
如果在 Storyboard中,要实现当前的 ViewController和要跳转到另一个ViewController。分两种情况:
1、连接场景segue存在。如果在 Storyboard中当前的 ViewController和要跳转的ViewController之间的segue存在,则可以执行performSegueWithIdentifier:sender:这个方法实现跳转。
2、连接场景segue不存在。如果目标ViewController存在Storyboard中,但是没有segue。你可以通过UIStoryboard的instantiateViewControllerWithIdentifier:这个方法获取到它,然后再用你想要的方式实现跳转,如:压栈。
3、如果目标ViewController不存在在 Storyboard中,那就先去创建它吧。