XCode 4.2 新功能 - Storyboard

XCode 4.2 新功能 - Storyboard

最近開始比較有空在玩 XCode 4.2(iOS5 Beta3),赫然發現它多了個 Storyboard 的東東。
Storyboard 這個東西通常來說是在作創意發想的時候,用來將本身的想的一些故事情節畫成像是連環漫畫一樣,想不到 Apple 把它用在這裡,真是佩服...

好吧,不廢話,先來說說這個 Storyboard 帶來什麼改變?

在這個版本前,我們在設計畫面的時候都是用 interface builder 產生一個 xib 檔,然後在 code 要出現這個畫面的時候多是用這樣的方式:

[self.navigationController pushViewController:viewController animated:YES];

好,也許你们(包括我)已經習慣這樣的方式了,不過若是畫面一多的話,到處 push 來 pop 去的,誰知道畫面之間是怎麼串呢?可能只有 PG 最清楚吧?

現在 Storyboard 解決了這樣的問題,讓你先將故事情節畫出來,像這樣

[attach]3682[/attach]

畫面中間那個像是轉接頭的叫作 Segue,先把你要的畫面(View controller)拉到 Storyboard 內之後,比方說要將 A畫面->B畫面,那麼在 A 上面按住 control 鍵,然後拉到 B 畫面,並選擇 performSegueWithIdentifi er:sender:,這樣兩個畫面就串起來了,當然你能够有不少路徑,比方說還能够有 A->C 或 A->D 之類的。

重點來了,那我在程式碼裡面要作什麼修改呢?

只要將本来的 pushViewController:animated: 的地方更改為如下這樣就能够了[code] [self.navigationController performSegueWithIdentifi er:@"SegueLevel1" sender:self];[/code]其中 SegueLevel1 是我本身訂的轉接頭名稱,若是你有不少路徑的話,那麼就能够有多個 Segue。

這樣作法的好處是我能够很快的把故事情節描述出來,萬一客戶的畫面之間改來改去的,那麼我只要變更个人 Storyboard,只要 Segue identifier 不變,程式碼天然就不须要修改了。不過少了 xib 一時間却是有點不習慣呢!
 
 
 

StoryBoard优点

 

 

 

StoryBoardiOS 5的新特征,旨在代替历史悠久的NIB/XIB(其实StoryBoard仍是基于NIB/XIB的,不过开发人员已经无需直接跟NIB打交道了)。目前关于StoryBoard的文档并很少,苹果的iOS 5的开发者文档里也仅有很少的介绍。因此,本文只是简单的谈谈本人对StoryBoard的一些粗浅的理解。(StoryBoard有时也叫作StoryBoarding,我不太注意这种细节,因此两个词常常会混用,若是你英语能够的话,能体会到二者的细微差异)html

[转载]iOS <wbr><wbr>5的StoryBoard

StoryBoarding机制比之NIB/XIB的的优点何在呢?我的认为,StoryBoard有如下几个优势:设计模式

可以减小不少跟View相关的代码;app

可以使ViewController进一步解耦;ide

可以优化程序的页面流,使程序的结构更清楚 ;优化

要理解这些优势,咱们先要对NIB有一个基本的认识。一般,NIB是和ViewController相关联的,不少ViewController都有对应的NIB文件。NIB文件的做用是描述用户界面以及初始化对象和界面元素对象。其实开发者在NIB里描述的界面和初始化的对象都可以在代码中实现;之因此用Interface Builder来绘制界面,是为了减小那些设置界面属性的无聊和重复的代码,让开发人员可以集中精力作程序的功能。ui

StoryBoard的出现,则是进一步增强了这方面的功能;NIB文件是没有办法描述从一个ViewController到另外一个ViewController的过渡的。这种过渡只能靠手写代码来实现。相信不少人都会常常用到 -presentModalViewController:animated:以及-pushViewController:animated:这两个方法。这种代码在Storyboarding里将成为历史;取而代之的是SegueSegue定义了从一个ViewController到另外一个ViewController的过渡。在Storyboard里,咱们只须要像链接界面对象和Action Method那样把ViewController之间用Segue链接起来就能够了,再也不须要手写代码了。即使你像自定义Segue,你也只需写Segue的实现,而无需编写调用的代码,StoryBoard会帮你调用的。这就是上面所说的第一个优势。url

[转载]iOS <wbr><wbr>5的StoryBoard

 

要用好Storyboarding机制,那么必须严格遵照MVC原则。要让ViewController充分解耦;而且不一样的Controller之间也要充分解耦。不然,程序的业务逻辑就会乱成一团,很难理解,维护和除虫(Debug)。spa

举个例子来讲:在过去,特别是初学Cocoa Touch开发的时候,不少人都喜欢直接把AppDelegateViewController用,直接在AppDelegateMainMenu.xib之间交互。应该说,这是一个很是很差的习惯。AppDelegate的做用很简单,就是处理UIApplication的回调,而不该该负责用户界面的处理。不少iOS教程为了省事,都直接把AppDelegateViewController用,甚至直接举例在UIWindow上绘制界面。虽然,做为教程这么作很简单明了,由于UIWindow也是UIView的子类,可是这却不是一种优良的实践。由于由ViewController来负责处理View才是正确的作法。设计

近一段时间,苹果的项目模版常常发生改变,特别是自从Xcode 4发布以后,程序模版(如,View Based Application)开始鼓励使用UIWindowrootViewController属性来指定第一屏的ViewController,以保证AppDelegate专一于它应该作的事情。而引入StoryBoard以后,AppDelegate已经无论ViewController的事情了 ;第一屏所使用的ViewController(也就是rootViewController)能够在StoryBoard中设置。这样,程序的入口点就能从StoryBoard设计图上一目了然了。这是第二个优势。3d

[转载]iOS <wbr><wbr>5的StoryBoard

 

至于第三个优势,就是StoryBoard设计图了。StoryBoard可以包含一个程序全部的ViewController以及它们之间的链接。所以,StoryBoard甚至能够做为程序的设计图来用了。理想状况下,在程序开发接近尾声的时候,咱们只需对比StoryBoard流程和最初程序的设计流程,就知道程序有没有走样了。

[转载]iOS <wbr><wbr>5的StoryBoard

 

说完了优势,咱们来看看从NIB/XIBStoryBoard的迁移,咱们须要有哪些理解和实践上的改变呢?

首先,天然是(在作程序开发的时候)ViewController再也不须要NIB/XIB了(虽然在后台仍是用的NIB)。之前在NIB/XIB上作的链接OutletAction的操做均可以在StoryBoard上完成了;

第二,孤儿View(独立于ViewControllerView)是不能出如今StoryBoard里的,View必须经过ViewController来管理(StoryBoard更像是Controller对象的容器,而不是View对象的容器,NIB/XIB能够做为View对象的容器);

第三,ViewController之间的过渡代码已是历史了,用StoryBoard能够直接可视化地链接不一样的ViewController

第四,UIWindow对象的做用被进一步淡化,甚至能够这么说:其实不少程序根本无需用到UIWindow对象。AppDelegate也再也不被鼓励(也不能)用来作ViewController--你甚至没法在Interface BuilderStoryBoard图上找到AppDelegate对象--由于它原本就不该该用来处理界面(View)的。

最后,写优质的代码,严格遵照MVC设计模式,这样不只可以让你用好StoryBoard,也能帮助你理解StoryBoard的原理。

StoryBoard是很是好的鼓励MVC和代码解耦的手段,可以让开发人员写出更加容易维护的代码。不过对于初学者来讲,确实是个对理解力的小挑战。不过做为初学者也不用担忧,一旦突破了理解障碍,你就会发现StoryBoard也很是好用--就像最初理解NIB/XIB时,OutletAction“拉线拉线去,看起来也很神奇;理解以后,发现原来拉线神马的也没那么神秘。

好了,絮絮不休的啰嗦了这么多无聊的文字,相信你也看累了。若是你依然对我写的东西不知所云的话,你能够稍稍研究一下Xcode 4.2的几个内建模版,而后和使用XIB的模版对比一下,看看苹果是怎么用StoryBoard的,可以很好的帮助你理解Storyboarding机制。固然,千万不要忘记亲自动手用一用StoryBoard

Happy Coding!

相关文章
相关标签/搜索