【Storyboard】Storyboard介紹及使用


參考文章

Storyboards Tutorial in iOS 7: Part 1

Storyboards Tutorial in iOS 7: Part 2


背景知識

Storyboard 在iOS5時(shí)引入炕横,它能節(jié)約你創(chuàng)建UI的時(shí)間控汉,先看一張storyboard的圖:
storyboard樣圖
storyboard樣圖

看到它包颁,你就像看到了一張?jiān)O(shè)計(jì)圖蚕泽,一切已胸有成竹车吹!

storyboard與常規(guī)nib(nib文件后來改名叫xib文件眷蚓,小伙伴不用糾結(jié)它是啥)文件相比,有很多優(yōu)勢:

  • 與散落的nib相比立倍,storyboard能給你一種全局感。

  • storyboard可以描述各種場景之間的過渡侣滩,這種過渡被稱作"segue",你通過簡單的ctrl-dragging就能搞定口注,減少代碼量。

  • storyboard支持table view的prototype cell君珠,這意味著你可以在storyboard中編輯cell寝志,減少代碼量。

當(dāng)然,世界上沒有完美的東西材部,由于Interface Builder還不夠強(qiáng)大毫缆,所以,有些nib能做到的乐导,storyboard還不能苦丁。而且,你需要一個(gè)更大的顯示器~

storyboard 把 view controller叫做:“scene”.


啟動(dòng)storyboard的系統(tǒng)預(yù)設(shè)

在工程plist中

plist
plist


storyboard操作

(iOS有所謂的三大container view controller物臂,分別是Tab Bar Controller旺拉,Navigation Controller,Split View Controller )

注意:在縮放的時(shí)候無法拖拽控件到畫板棵磷。
1.更改初始化視圖控制器

  • 選擇初始化view controller蛾狗,選中相應(yīng)view controller -> Attributes inspector,勾選Is Initial View Controller,如圖
    initial view controller
    initial view controller
  • 直接拖拽初始化箭頭到相應(yīng)視圖控制器

    如果更改了初始化的view controller,會(huì)發(fā)現(xiàn)初始化箭頭發(fā)生移動(dòng)仪媒,如圖:
    初始化箭頭移動(dòng)
    初始化箭頭移動(dòng)

2.添加Navigation Controller

  • 選中要添加Navigation Controller的視圖控制器沉桌,在Xcode menubar選擇Editor\Embed In\Navigation Controller
  • 從Object Library拖拽

在storyboard的畫板上,會(huì)虛擬出一個(gè)Navigation Controller的scene规丽,它當(dāng)然不是一個(gè)真的UINavigationBar對象蒲牧,而是虛擬一個(gè),方便我們操作和理解赌莺。

當(dāng)我們點(diǎn)擊與Navigation Controller連接的視圖控制器,點(diǎn)擊Attributes inspector松嘶,會(huì)發(fā)現(xiàn)Simulated Metrics艘狭,如圖:

Simulated Metrics
Simulated Metrics

Inferred是storyboard的缺省設(shè)置,這意味著該視圖控制器在Navigation Controller中時(shí),會(huì)展示一個(gè)navigation bar (當(dāng)然翠订,在其他container view controller中巢音,會(huì)展示相對的bar,比如尽超,在一個(gè)tab bar controller中會(huì)展示一個(gè)tab bar).Simulated Metrics并不能用于runtime.

3.創(chuàng)建relationship segue

如圖所示:
tab bar controller
tab bar controller

Ctrl-drag官撼,從tab bar controller 連到navigation controller,松手,彈出 popup menu,如圖:

popup menu
popup menu

選擇Relationship Segue – view controllers似谁,結(jié)果如圖:

Relationship Segue – view controllers
Relationship Segue – view controllers

4.命名tabbar controller和navigation controller中的bar item

并非在tabbar controller 里傲绣,而是在與其相連、對應(yīng)的controller里巩踏,如圖:
修改tabbar controller展示出來的tab item
修改tabbar controller展示出來的tab item

同理秃诵,修改navigation bar,也是在對應(yīng)的controller里塞琼,而不是虛擬的navigation controller菠净,如圖:
修改navigation bar
修改navigation bar

5.自定義UI類
就像你不用storyboard一樣,創(chuàng)建一個(gè)類,當(dāng)然毅往,就不要勾選xib選項(xiàng)了牵咙,從storyboard的object library中拖拽出它的父類UI,在此UI的Indentity inspector中攀唯,將這個(gè)類與UI綁定洁桌,如圖:

自定義UI類
自定義UI類

6.在storyboard中找到相應(yīng)的視圖控制器

舉例,找到tab bar controller第一個(gè)tab————一個(gè)帶有導(dǎo)航欄的視圖控制器革答,

 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UINavigationController *navigationController = [tabBarController viewControllers][0];
    PlayersViewController *playersViewController = [navigationController viewControllers][0];  

7.Prototype cells
我們用static cells战坤,一般是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:CellIdentifier];
    }
 
    // Configure the cell...
    return cell;
}  

用Prototype cells是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"];
 
    // Configure the cell...
 
    return cell;
}  

我們選中控制器的tableview空間,第一個(gè)就是cell的選擇残拐,如圖:


table view cell

默認(rèn)是prototype cell.

有沒有想過把prototype cell 用在不同的table view 中途茫?我這樣想過,了解了一下溪食,發(fā)現(xiàn)目前storyboard還不支持囊卜,如果想曲線救國,實(shí)現(xiàn)起來挺復(fù)雜的错沃,參見Reusable UITableView's prototype cell栅组。

8.Static Cell
如果用static cell,我們就不用為tableview創(chuàng)建data source枢析,因?yàn)樗褪莻€(gè)靜態(tài)的cell,不需重用玉掸,所以,你可以把該cell上的UI控件拖拽到對應(yīng)的controller(Prototype cell是不行的)醒叁,如圖:

static cell
static cell

拖拽static cell上的控件到對應(yīng)的controller
拖拽static cell上的控件到對應(yīng)的controller

9.添加bar button item 到導(dǎo)航欄
拖拽一個(gè)bar button item 到擁有導(dǎo)航欄的控制器上司浪,而不是那個(gè)虛擬的navigation controller.

10.segue

我們在前面說過container view controller 有一種relationship segue,它表示一個(gè)container view controller上所擁有的view controller,另外把沼,就是用于view controller之間過渡的segue啊易,它可以由button,cell,gesture等等來觸發(fā)。

它的優(yōu)勢在于饮睬,節(jié)省很多代碼量租谈,很直觀,你不用再寫什么方法捆愁,或者像xib那樣連接諸如IBAcation之類的東西割去。

  • 操作segue
    例如:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"AddPlayer"]) {
 
        UINavigationController *navigationController = segue.destinationViewController;
        PlayerDetailsViewController *playerDetailsViewController = [navigationController viewControllers][0];
        playerDetailsViewController.delegate = self;
    }
}  

注意:記得給segue添加Identifier

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牙瓢,隨后出現(xiàn)的幾起案子劫拗,更是在濱河造成了極大的恐慌,老刑警劉巖矾克,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页慷,死亡現(xiàn)場離奇詭異憔足,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)酒繁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門滓彰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人州袒,你說我怎么就攤上這事揭绑。” “怎么了郎哭?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵他匪,是天一觀的道長。 經(jīng)常有香客問我夸研,道長邦蜜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任亥至,我火速辦了婚禮悼沈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姐扮。我一直安慰自己絮供,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布茶敏。 她就那樣靜靜地躺著壤靶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惊搏。 梳的紋絲不亂的頭發(fā)上萍肆,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音胀屿,去河邊找鬼。 笑死包雀,一個(gè)胖子當(dāng)著我的面吹牛宿崭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播才写,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼葡兑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赞草?” 一聲冷哼從身側(cè)響起讹堤,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厨疙,沒想到半個(gè)月后洲守,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年梗醇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了知允。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叙谨,死狀恐怖温鸽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情手负,我是刑警寧澤涤垫,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站竟终,受9級特大地震影響蝠猬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衡楞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一吱雏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘾境,春花似錦歧杏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兑凿,卻和暖如春凯力,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背礼华。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工咐鹤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人圣絮。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓祈惶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扮匠。 傳聞我的和親對象是個(gè)殘疾皇子捧请,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容