加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
iOS程式開發與XCode4.X-Storyboard(下)
文‧圖/何孟翰 2012/6/8 下午 04:31:27

使用Segue作資料的傳遞

如此使用Segue看起來非常的視覺化,但是有一個地方需要注意,就是資料該如何去傳遞。因為你可以發現使用者介面是在Storyboard時被載入的,所以程式碼需要一些進入點來操作。

事實上在第一個ViewController到第二個ViewController時,Storyboard使用了一個機制叫作Segue,這個Segue可以在storyboard的主畫面中找到,你可以看到在第一個 Scene中有一個Push Segue如圖21。



圖21 由第一個畫面至第二個畫面的Segue元件



請你點擊這個Segue之後打開它的屬性檢視器,在identifier中將它加入識別碼"showSecond"如圖22。


▲ 圖22 設定Segue的識別碼是showSecond


設定完成之後,請你照同樣的方式設定第二個ViewController的類別為SecondViewController,生成這個類別並且將它設定在storyboard之中。設定完成之後,由於從第一個畫面至第二個畫面,我們希望對這個新增加的ViewController有一些設定的效果,所以可以撰寫prepareForSegue: sender:來設定它。請注意,此處傳回的 segue就是被啟動的segue,而我們設定的identifier正是作為程式碼的判定,而在segue的這個類別實例中有一個函數destionationViewController,可以作為目的地的View Controller,如同圖18,這裡的目的ViewController就是SecondViewController。因此我們可以在程式碼中判定,如果傳回的是這個Segue,就將它的目標的ViewController設定成紅色的如圖 23。



▲ 圖23 修改prepareForSegue設定下一個ViewController的屬性


在模擬器上執行,當你按下Next之後,你可以看到這個畫面變成紅色的如圖24。



▲ 圖 24 在模擬器上執行的結果


載入沒有連結的View Controller

事實上Storyboard除了能夠如此的檔案中的ViewController透過Segue作連結,更重要的是它可以作為xib的集合,所以你可以將一些無關的ViewController都透過storyboard加入,並且再使用storyboard將它取出。

首先請你在storyboard中加入第三個ViewController,並且在它上面加入一些任意的內容如圖25。請注意它並不需要和其它的畫面有任何的連結。



▲ 圖 25 加入一個單獨的View Controller


但是此時請你注意,我們必須要能夠識別這個xib是哪一個xib,所以你必須在這個獨立的ViewController中增加它的Identifier如圖 26。



▲ 圖26 增加這個ViewController的Identifier


如此在程式中,你就可以使用storyboard來呼叫它。對於ViewController來說,可以呼叫self.storyboard來取得這個storyboard的實例,同時要取得其它的ViewController,你可以給它適當的類別之後呼叫instantiateViewControllerWithIdentifier並且填入圖26的識別碼即可。舉例而言,你可以在第二個ViewController,新增一個按鈕,並且增加一個IBAction並且建立它的連線如圖27。



▲ 圖 27 建立Storyboard的連線


如此在模擬器上執行的結果如圖28,在SecondViewController中會看到一個按鈕如圖 28。



▲ 圖 28 在模擬器上執行的結果


當按下Show之後,出現的畫面如圖29。



▲ 圖 29 按下Next之後顯示出的ViewController


請注意在這邊我們使用了presentViewController,這個函數在Storyboard中也有對應的 Segue可以對應,你可以使用Model來完成相對應的作用。

後記

在本文中我們大致說明了Xcode從xib檔到storyboard進化的歷程,也簡單的介紹了storyboard中的幾個重要的元件,也用UINavigationController作為storyboard的串場。事實上像是標籤列與表格,在storyboard中也有一些新的功能,我們將在後續的文章繼續討論。