天天看點

iOS 5 Storyboard 入門-2

iOS 5 Storyboard 入門-2

<a target="_blank" href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FSFuUco&amp;via=rwenderlich&amp;text=iOS%205%20Storyboard%20%E5%85%A5%E9%97%A8-2&amp;related=rwenderlich&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.raywenderlich.com%2Fzh-hans%2F18162%2Fios-5-storyboard-%25e5%2585%25a5%25e9%2597%25a8-2">Tweet</a>

iOS 5 Storyboard 入門-2

一個資深的iOS開發者和設計師

如果你想了解關于 iOS 5 中 Storyboard 更多的特性, 那麼你來對地方了!

我們介紹了用 storyboard 編輯器在控制器之間建立連接配接,還有如何利用 storyboard 編輯器建立自定義的單元格。

在這個系列的第二部分也是最後一部分, 我們将會探讨 segues, 靜态單元格, 增加玩家資訊界面, 遊戲選擇界面!

我們将接着上一篇教程繼續開始, 打開你上一次的項目, 或者先去看看上一篇教程

好了,讓我們研究一下Storyboard的其他一些炫酷功能吧。

現在是時候為我們的 Storyboard 添加更多的控制器了。 我們将要建立一個新界面,用來讓使用者增加新的玩家到應用中。

在Players界面上,拖動一個 Bar Button Item 到導航欄裡面的右邊。 在 Attributes Inspector 中修改它的 Identifier 為 Add, 讓它變成一個标準的 + 按鈕。 當你點選這個按鈕時, 我們将彈出一個模态界面讓你來輸入新使用者的詳細資訊。

拖出一個新的 Table View Controller 到主面闆上, 放在 Players 界面的右邊。 記住你可以在面闆上輕按兩下滑鼠來縮放面闆, 這樣可以給你大的工作區域。

讓這個新的 Table View Controller 處于選中狀态,并且将他嵌入到一個 Navigation Controller 中(如果你忘了怎麼操作,在菜單欄中選擇 EditorEmbed InNavigation Controller).).

這裡有一個小技巧, 選中我們剛剛加入到Players界面中的 + 按鈕, 然後按住Ctrl拖動到新的 Navigation Controller:

iOS 5 Storyboard 入門-2

松開滑鼠按鍵, 一個小彈出框就出現了:

iOS 5 Storyboard 入門-2

選擇 Modal。 這樣就在 Players 界面和這個 Navigation Controller 之間建立了一個新類型的箭頭:

iOS 5 Storyboard 入門-2

這種類型的連接配接被稱之為 segue(發音為:seg-way)),它表示了從一個界面切換到另一個界面。 目前為止我們建立的連接配接都是表示控制器之間的關系的。 而Segue, 和我們之前建立的連接配接不同, 它改變了螢幕上顯示的界面。 他們可以通過點選按鈕,單元格,手勢等方式來觸發。

segue最酷的一件事就是,你不再需要為展現新界面寫任何代碼了,也不需要為你的按鈕綁定IBAction了。 我們剛才做的,從 Bar Button Item 拖動到下一個界面, 這就足以建立這個界面切換了。 (如果你的控件已經綁定了 IBAction 事件, 那麼 segue 會覆寫它)。

運作應用, 然後點選這個 + 按鈕,一個新的Table View 将會從螢幕上滑出來。

iOS 5 Storyboard 入門-2

這就是 “Modal” segus. 新的界面完全遮蓋住了前一個界面。 直到關閉這個 Modal 界面,否則使用者是不能操作前一個界面的。 在後面, 我們還會看到 “Push” segue, 它會在導航欄的棧中壓入一個新的界面。

這個新界面還不是很有用 — 你甚至不能關閉它回到主界面!

Segue 是單向的, 從 Players 界面到這個新界面。 如果要傳回, 我們必須用代理模式。 為了這樣, 我們首先必須為這個新界面定義它自己的類。 增加一個新的 UITableViewController 子類到項目中, 檔案名叫做 PlayerDetailsViewController。

我們要綁定它到storyboard。 切換回 MainStoryboard.storyboard, 選中剛才那個建立的 Table View Controller, 并且在 Identity Inspector 中設定 Class 為 PlayerDetailsViewController。 我總是忘記這個重要的一步。 是以, 為了確定你不會這樣, 我将會一直提到它。

把這個界面的 title 修改成 “Add Player” (輕按兩下導覽列)。 增加兩個 Bar Button Item 到導覽列上面, 在 Attributes Inspector 中, 分别設定兩個設定按鈕的 Identifier 屬性為 Cancel 和 Done。

iOS 5 Storyboard 入門-2

然後修改 PlayerDetailsViewController.h 檔案:

這裡定義了一個新的代理協定, 當使用者點選取消和完成按鈕時, 我們用它來從 Add Player 界面向主界面通信。

切換回 Storyboard 編輯器, 并将取消和完成按鈕分别綁定到它們的事件方法中去。 一個方法是, 按住 Ctrl 然後從按鈕拖動到控制器, 然後從彈出框中找到相應的動作名稱。

iOS 5 Storyboard 入門-2

在 PlayerDetailsViewController.m 檔案底部中,添加如下兩個方法:

設定兩個導航欄按鈕的動作方法。 現在,它們隻是讓代理對象知道發生了什麼事情。 具體要怎麼相應這些事件,就是代理對象的事了。 (這不是必須的,不過是我喜歡的一種方式。 還有,你也可以讓 Add Player 界面在通知它的代理之前,先關閉自己)。

注意一下,代理方法通常會用第一個參數來引用調用它的哪個對象, 在我們這裡是 PlayerDetailsViewController。 這個方式能讓代理知道是哪個對象給它發送的消息。

别忘了用 synthesize 定義一下 delegate 屬性。

現在我們給 PlayerDetailsViewController 添加了一個代理協定,我們還需要在一些地方實作他們。 很明顯, 應該在 PlayersViewController 中實作, 因為是它展現的 Add Player 界面。 在 PlayersViewController.h 中,加入如下内容:

添加到 PlayersViewController.m 底部:

現在,代理方法隻是簡單的關閉目前界面。 稍後我們會讓它做一些有趣的事情。

dismissViewControllerAnimated:completion: 這個方法是 iOS 5 新增的。 以前你可能用過 dismissModalViewControllerAnimated: 方法。 這個方法現在還可以繼續使用, 不過這個新版本的方法應該是首選(因為他能讓你在界面消失後,執行一些附加的代碼)。

還有最後一件事要做: Players 界面必須告訴 PlayerDetailsViewController 它是它的代理。 簡單看起來, 這件事好像在 Storyboard 編輯器中拖動一條線就能完成。很不幸, 這樣不行。 使用segue的過程中,我們需要寫一些代碼才能傳送資料到新的控制器。

在 PlayersViewController 中增加如下方法(位置無所謂)

當segue開始執行時,都會調用 prepareForSegue 方法。 在這個方法調用時, 新的控制器已經被加載出來了,但是還沒有顯示出來, 我們可以利用這個機會來把資料傳遞給它。 (你不能自己調用 prepareForSegue, 這是 UIKit 用來通知你 segue 被觸發時調用的方法)。

注意這個 segue 的目标是 Navigation Controller, 因為它是我們從 Bar Button Item 連接配接過去的。 要得到 PlayerDetailsViewController 的執行個體, 我們必須深度周遊 Navigation Controller 的 viewControllers 屬性。

運作應用,按下 + 按鈕, 然後嘗試關閉 Add Player 界面, 它還是不能正常工作!

這是因為我們沒有給Segue設定過辨別(identifier)。 prepareForSegue 中的代碼檢測的是辨別為 AddPlayer 的 segue。 建議每次都進行這樣的檢測, 因為你可能在一個控制器中有多個segue, 并且你需要區分他們(後面我們會做到這個)。

為了解決這個問題, 我們進入Storyboard編輯器,并且點選在 Players 界面和 Navigation Controller 之間的 segue。 注意到 Bar Button Item 被高亮顯示了, 是以你可以清楚的看到是哪個控件觸發的這個segue。

在 Attributes Inspector 中,設定 Identifier 屬性為 “AddPlayer”:

iOS 5 Storyboard 入門-2

再次運作這個應用, 點選 Cancel 或者 Done 按鈕, 就會按照預期關閉目前界面并且傳回到玩家清單界面。

注意: 完全可以在彈出的模态界面中調用 dismissViewControllerAnimated:completion: 方法。 并不是必須要在代理中使用這個方法。

不過,我個人比較喜歡把它放在代理中, 但是,如果你向讓模态界面來關閉它自己也是沒問題的。 有一點你需要注意的: 如果你使用以前的這個方法 [self.parentViewController dismissModalViewControllerAnimated:YES] 來關閉界面的話,它不會正常工作了。 現在可以用 self.presentingViewController 而不是 self.parentViewController 來調用這個方法, 這是iOS 5 新增加的一個屬性。

順便說一下,segue 的 Attributes Inspector 中, 有一個 Transition 屬性, 你可以選擇不同的切換動畫:

iOS 5 Storyboard 入門-2

可以都試試他們,找到哪個是你最喜歡的。 但是不要改變 Style 設定。 因為這個界面是模态的,修改其他選項會導緻應用崩潰。

我們将會在教程中多次用到代理模式。 這裡是在兩個 scene 之間建立連接配接的步驟。

在源 scene 中的按鈕或其他控件上建立 segue 到目标 scene。(如果你想用模态的方式展現新界面, 那麼一般目标應該是 Navigation Controller)

為 segue 設定一個唯一辨別。(它僅僅需要在源 scene 中唯一, 不同的 scene 可以用同樣的辨別名)

為目标 scene 建立代理協定

調用 Cancel 和 Done 按鈕上的代理方法, 另一方面, 你的目标 Scene 需要和源 Scene 進行通訊。

讓源 Scene 實作代理協定。 它應該在 Cancel 或 Done 按鈕按下的時候關閉目标控制器。

在源 Scene 中實作 prepareForSegue 方法, 在這裡設定 destination.delegate = self; 。

因為沒有反向的 Segue, 是以代理是必須要有的。 當 Segue 被觸發時,會建立一個新的目标控制器。 你當然可以從目标控制器用 Segue 傳回源控制器, 但是這樣不會得到你期望的效果。

例如,如果你在 Cancel 按鈕上,建立了一個傳回 Players 界面的 Segue, 它不會關閉建立玩家的界面,也不會傳回到 Players 界面, 它會建立一個新的 Players 界面。 這樣你就陷入了一個死循環中, 直到應用的記憶體用盡。

記住:Segue 隻能是單向的, 他們隻能用于打開一個新界面。 如果要傳回或者關閉界面(或者從導航控件的棧中彈出),通常都是用代理來做的。 Segue 僅僅聽從于源控制器, 而目标控制器甚至都不知道自己是被 Segue 打開的。

當我們完成這些後, 增加玩家的界面應該是這樣:

iOS 5 Storyboard 入門-2

當然,這是一個分組的Table View,但不同的是,這次我們不用為這個Table View 建立資料源了。 我們可以直接在 Storyboard 編輯器中設計它, 不需要 cellForRowAtIndexPath 方法了。 靜态單元格提供的特性,讓這成為了可能。

在 Add Player 界面中選擇Table View, 并且在 Attributes Inspector 中修改 Content 的值為 Static Cells。 設定 Style 屬性為 Grouped, Sections 屬性為 2。

iOS 5 Storyboard 入門-2

當你修改了 Sections 屬性, 編輯器會複制現有的 section。 (你也可以在左邊的文檔大綱中,選擇一個特定的 Section, 然後複制它)。

我們的界面中,每個 Section 隻需要一行資料, 删除掉那些多餘的單元格吧。

選中最上面的 section, 在 Attributes Inspector 中設定 Header 屬性為 “Player Name”。

iOS 5 Storyboard 入門-2

拖動一個新的 Text Field 到這個 Section 的單元格中。 删除它的邊框,這樣你就不能看到文本是從何處開始和結束的了。 設定字型為 System 17, 并且取消 Adjust to Fit。

我們将在 PlayerDetailsViewController 中用 Xcode 的 Assistant Editor 功能為這個文本框建立一個outlet。 用工具欄上的按鈕打開 Assistant Editor*(那個看起來想一個燕尾服的按鈕)。 它應該會自動打開 PlayerDetailsViewController.h 。

選中文本框, 然後按住 Ctrl 拖動到 .h 檔案中:

iOS 5 Storyboard 入門-2

松開滑鼠按鍵, 會出現一個彈出框:

iOS 5 Storyboard 入門-2

給這個新的 outlet 命名為 nameTextField。 點選 Connect 按鈕後, Xcode 會為 PlayerDetailsViewController.h 增加如下的屬性:

它還會自動 synthesize 這個屬性,并把它添加到 .m 檔案的 viewDidUnload 方法中。

我告訴過你,這種方式在原型單元格中是不能用的, 但是在靜态單元格中是可以的。 因為每個靜态單元格隻有一個執行個體(不像原型單元格, 他們從來不會被複制), 是以,将它們的子視圖連接配接到控制器上也是完全可以的。

設定第二個 Section 中的靜态單元格的 Style 屬性為 Right Detail。 這給了我們一個标準的樣式去操作。 修改左邊的 Label 的文字為 “Game”, 并且為這個單元格設定一個向右訓示的箭頭。 為右邊的 Label(文本為 “Detail” 的那個)建立一個 outlet, 并且命名為 detailLabel。 這個單元格上面的 Label 隻是普通的 UILabel 對象。

Add Player 界面的最終設計如下:

iOS 5 Storyboard 入門-2

當你使用靜态單元格時, 你的 Table View 控制器不需要資料源。 因為我們是用 Xcode 模闆建立的 PlayerDetailsViewController 類, 它仍然會有資料源相關的預設代碼, 是以讓我們把這些代碼删除掉吧, 現在我們不需要它了。 删除下面兩個代碼斷之間的所有代碼:

這樣應該會去掉 Xcode 關于這個類的所有警告消息。

運作應用, 看到新的界面是靜态單元格構成的。 所有這些都沒有寫過一行代碼 — 事實上, 我們還删除了很多代碼。

我們應該把代碼寫完整, 當你把文本框添加到第一個單元格時, 你可能注意到它并沒有完全适應界面, 在文本框的周圍,有一個小小的外邊距。 使用者不能看到文本框是何處起始和結束的, 是以如果使用者點選到外邊距區域,鍵盤就不會彈出來,這樣會給使用者造成迷惑。 為了避免這種情況,我們應該在點選單元格的任何區域時,都讓鍵盤彈出來。 這非常簡單, 僅僅需要覆寫 tableView:didSelectRowAtIndexPath 方法:

這個的意思是, 如果使用者點選了第一個單元格, 我們就激活文本框(因為每個單元格隻有一行, 是以我們隻需要判斷 section 的索引)。 這樣會自動的彈出鍵盤。 這隻是一個小技巧, 但是這避免了使用者的迷惑。

你還應該在 Attributes Inspector, 中設定這個單元格的 Selection Style 屬性為 None(而不是 Blue), 否則當使用者點選文本框的外邊距部分時,單元格的背景會變成藍色。

好了, 這就是 Add Player 的設計部分了, 現在讓它來實際運轉起來吧。

到現在,我們忽略了 Game 這行, 僅僅讓使用者在這裡輸入玩家的名稱,沒做任何其他的事情。

當使用者按下 Cancel 按鈕, 這個界面應該關閉, 這裡輸入的任何資料都将會丢失。 這個功能已經可以了。 代理對象(Players 界面)接受到 “did cancel” 消息, 然後直接關閉控制器。

當使用者按下 Done, 我們應該建立一個新的 Player 對象,然後設定好它的屬性。 然後, 我們應該告訴代理對象, 我們增加了一個新的玩家, 這樣, 它就可以更新它自己的界面了。

PlayerDetailsViewController.m 中,修改 done 方法:

需要導入 Player:

done 方法,現在建立了一個新的 Player 執行個體并且把它發送給代理。 代理協定現在還沒有這個方法, 是以,我們修改一些 PlayerDetailsViewController.h 的定義:

“didSave” 方法的定義去掉了, 而我們現在有了 “didAddPlayer” 方法。

最後一件要做的事,就是在 PlayersViewController.m 檔案中,添加這個方法的實作:

首先,把這個新的 Player 對象添加到 players 數組中。 然後告訴 Table View 增加了一行新資料(在最下面), 因為 Table View 和它的資料源必須時刻保持同步。 我們可以直接用 [self.tableView reloadData] 方法, 但是用一個動畫插入新的一行,看起來會更好。 UITableViewRowAnimationAutomatic 是 iOS 5 中新提供的一個常量, 它會根據你要插入的行的位置,自動找到一個合适的動畫,非常友善。

試一下吧, 你現在應該可以把新的玩家增加到主界面的清單中了!

如果你對 storyboard 的性能好奇, 你應該知道一點,一次性加載整個 storyboard 不是一個大問題。 Storyboard 不會一次性的執行個體化它裡面的所有控制器, 隻會執行個體化初始控制器。 因為我們的初始控制器是一個 Tab Bar Controller, 它裡面包含的兩個子控制器也會被加載(Players Scene 和 第二個 Tab 中的 Scene)。

直到你用 segue 打開他們, 否則其他的控制器是不會被加載的。 當你關閉控制器後,他們又會被釋放掉, 是以僅有目前正在使用的控制器才會在記憶體中, 和你用單獨的 nib 是一樣的。

讓我們實踐一下, 在 PlayerDetailsViewController.m 中增加如下方法:

我們重寫了 initWithCoder 和 dealloc 方法,在裡面增加了一些日志輸出。 現在,再次運作應用,并且打開 Add Player 界面。你應該會看到,這個控制器在這個時候,才會被初始化。 當你關閉 Add Player 界面後,按下 Cancel 或者 Done按鈕, 你應該會看到 dealloc 中的 NSLog 輸出。如果你再次打開這個界面,你應該還會再看見 initWithCoder 中輸出的消息。 這樣會保證你的控制器隻有在需要時才會被加載, 就和手動的加載 nib 檔案是一樣的。

關于靜态單元格另外一點,他們隻能使用在 UITableViewController 中。 Storyboard 編輯器可以讓你把它們添加到普通的 UIViewController 中的 Table View 上面, 但是這個在運作時不會正常工作。 原因是, UITableViewController 内部有一些特殊的機制來管理靜态單元格的資料源。 Xcode 甚至通過顯示錯誤消息 “Illegal Configuration: Static table views are only valid when embedded

in UITableViewController instances” 來防止你這樣做。

另一方面, 原型單元格可以在 UIViewController 中很好的工作。 不過,這兩種單元格,都不能用在 Interface Builder 中。 目前,如果你想使用原型單元格或者是靜态單元格, 那麼你就必須使用 Storyboard。

注意: 如果你要建立一個有很多靜态單元格的界面 — 超出了可顯示區域 — 那麼你可以在 Storyboard 編輯器中使用滑鼠或觸摸闆(雙指滑動)上面的滾動手勢。 這個可能不是很明顯,

但是它确實可以用。

點選 Add Player 界面中的 Game 那行應該打開一個新的界面, 來讓使用者從一個清單中選擇一個遊戲。 這就是說,我們需要添加一個新的 Table View Controller, 然而這次我們将把它壓入導航欄的棧中,而不是模态的顯示它。

拖動一個新的 Table View Controller 到 storyboard 上面。 在 Add Player 界面中選擇 Game 單元格(要確定選中的是整個單元格, 而不是裡面的 Label), 然後按住 Ctrl 拖動到新的 Table View Controller 上, 在他們之間建立一個 segue。 建立一個 Push segue 并且給它的辨別命名為 “PickGame”。

輕按兩下導覽列,設定它的名稱為 “Choose Game”。 設定原型單元格的 Style 屬性為 Basic, 并且設定 Reuse Identifier 為 “GameCell”。 這就是所有我們需要對這個界面進行的設計:

iOS 5 Storyboard 入門-2

增加一個新的 UITableViewController 子類,并且名稱為 GamePickerViewController。 不要忘記把 storyboard 中的 Table View Controller 和這個類關聯起來。

首先,我們要給這個新的界面一些資料來顯示,為 GamePickerViewController.h 增加一個執行個體變量。

然後切換到 GamePickerViewController.m, 在 viewDidLoad 方法中填充這個數組:

因為我們在 viewDidload 中建立的這個數組, 我們必須在 viewDidUnload 中釋放它:

即便實際上 viewDidUnload 不會被這個界面調用(我們沒有用另外一個視圖蓋住它), 不過這是一個好的實踐, 總是要平衡記憶體的配置設定和釋放。

替換用模闆生成的資料源方法:

隻要資料源連接配接上,就會做這些事情。 運作應用, 然後點選 Game 那行單元格。 這個新的選擇遊戲的界面就會滑出來。 現在點選單元格不會有任何反應,但是這個界面展現在了導航欄棧上面,你可以按下傳回按鈕來回到 Add Player 界面。

iOS 5 Storyboard 入門-2

這非常的酷吧? 我們不需要寫一行代碼,就可以打開一個新界面。 我們僅僅從這個靜态單元格拖動到了新的 Scene上面,這就行了。(注意,當你點選 Game 單元格時,PlayerDetailsViewController 中的代理方法 didSelectRowAtIndexPath 還是會被調用, 是以要確定你這裡的代碼不會和 segue 沖突)。

當然, 如果這個新界面不往回發送資料的話,那它一點用處也沒有, 是以我們必須為它增加一個新的代理。 在 GamePickerViewController.h 中增加如下代碼:

我們增加了一個含有一個方法的代理協定, 和一個用于儲存目前選中的遊戲的屬性。

修改 GamePickerViewController.m 檔案的頂部:

這裡增加了一個新的 ivar, selectedIndex , 并且用 synthesize 聲明了這個屬性。

然後,在 viewDidLoad 底部增加這幾行:

選中的遊戲的名稱,會被設定到 self.game 中。 這裡我們找到這個遊戲在 games 數組中的索引。 我們将用這個索引來設定單元格的選中狀态。 為了能正常運作, 必須在視圖加載完成之前 self.game 指派。 因為我們是在調用者的 prepareForSegue 方法中給他指派,這個方法會在 viewDidLoad 之前執行, 是以這就不成問題了。

Change cellForRowAtIndexPath to:

這裡将為包含的名稱為目前選擇的遊戲的單元格設定一個選中符号。 我确信這個小小的優化會讓使用者很喜歡。

替換模闆生成的方法 didSelectRowAtIndexPath:

在單元格被點選時,我們首先反選了它。 這讓它從高亮的藍色變成正常的白色。 然後我們删除之前選中的單元格的選中符号, 并且把它放到我們剛剛點選的單元格上面。 最後, 我們把選中的遊戲的名稱傳遞給代理對象。

運作應用,測試一下這個。 點選一個遊戲的名稱,它所在的單元格會得到一個選中符号。 點選另一個遊戲的名稱, 選中符号就會移動到它上面。 這個界面應該在你點選任何一行後馬上消失, 但是它沒有這樣, 因為你還沒有綁定代理對象。

在 PlayerDetailsViewController.h 中,添加導入語句:

在 @interface 這行, 增加代理協定:

在 PlayerDetailsViewController.m 中, 添加 prepareForSegue 方法:

這和我們之前做的很像。 這次目标控制器是一個 Game Picker 界面。 記住這裡的代碼會在 GamePickerViewController 初始化之後, 和它的視圖被加載之前執行。

game 變量是一個新的變量:

我們用這個 ivar 來記錄選中的遊戲,是以我們可以稍後再把它存放到 Player 對象中。 我們應該給它一個預設值。 initWithCoder 方法是做這個事情的好地方。

如果你以前用過 nib, 你應該會比較熟悉 initWithCoder 這個方法。 在 storyboard 中它還是同樣的功能。 initWithCoder,awakeFromNib 和 viewDidLoad 這些方法仍然會被使用。 你可以把 Storyboard 想象成一個很多 nib 的集合, 并且附帶了控制器間如何切換,和他們之間的關系的資訊。 但是storyboard中的視圖和視圖控制器,還是以同樣的方式編碼和解碼。

修改 viewDidLoad 方法, 用來把遊戲的名稱顯示到單元格上:

剩下的就差實作代理方法了:

這個看起來很直覺, 我們把新選擇的遊戲的名稱指派給 game 執行個體變量和單元格上面的 Label, 然後我們關閉了遊戲選擇界面。 因為它是一個 push segue, 我們必須把它從導航欄的棧中彈出來關閉它。

我們的 done 方法,現在可以把選擇好的遊戲的名稱指派給 Player 對象了:

棒極了,我們現在有了一個功能齊全的遊戲選擇界面!

iOS 5 Storyboard 入門-2

祝賀你,你現在已經知道了 Storyboard 的基本使用方法, 并且可以建立有多可控制器并且通過 segue 在他們之間切換的應用!

如何修改 PlayerDetailsViewController, 讓使用者能夠修改已經存在的 Player 對象。

如何同時建立多個向外的 segue, 以及如何讓控制器重用,進而能夠處理多個不同來源的 segue。

如何用單元格的導航按鈕(disclosure button),手勢和其他你能想到的事件上執行 segue。

如何建立自定義 segue – 你不僅僅限于使用标準的 Push 和 Modal 動畫!

如何在 iPad 上面使用 storyboard 建立 split-view controller 和 彈出視窗(popovers)。

最後,如何手動加載 storyboard, 以及在應用中如何使用多個 storyboard。

如果有關于這個教程或者任何關于 Storyboard 問題或建議,請加入我們的論壇一起讨論!

iOS 5 Storyboard 入門-2

一個資深的iOS開發者和設計師.

iOS 5 Storyboard 入門-2
iOS 5 Storyboard 入門-2

<a target="_blank" href="http://www.raywenderlich.com/u/rwenderlich">Ray Wenderlich</a>

and is passionate both about making apps and teaching others the techniques to make them.

When Ray’s not programming, he’s probably playing video games, role playing games, or board games.

<a target="_blank" href="http://www.twitter.com/rwenderlich">Follow Ray Wenderlich on Twitter</a>

繼續閱讀