Storyboard的基礎知識-介面管理、多View切換、View間資料傳遞
Storyboard是現在Apple推薦的介面管理方式,我初學,使用的Xcode 5,預設已經不再使用XIB管理介面了,不過Storyboard跟XIB其實也是一樣的,都是一個XML檔案,只不過Storyboard的XML結構更加複雜。
一、Storyboard與XIB的區別
在之前使用XIB進行iOS應用的介面管理時,使用IB只能對一個介面一個介面進行單獨管理,介面之前的邏輯關係需要開發程式設計師來牢記,如果介面過多,那會是一個非常複雜的關係。
引入Storyboard後,我們可以看到上面的圖可以看出,我們可以在一個視窗中管理多個View,多個View之間的關係非常清晰,所以這極大方便了開發者理清各個View之間的邏輯關係。
二、認識Storyboard中的元素
在Storyboard中有三種元素——起始標籤、各個介面的View和聯絡各個View關係的Segue。
1、起始標籤
一個Storyboard有且只有一個起始標籤,起始標籤指向的是這個Storyboard被啟動時首先顯示的介面,也就是程式的UI入口。
2、View
一個View對應一個介面,類似於一個XIB。
3、Segue
Segue表示了View之間的關係
三、建立並執行一個Storyboard
建立好一個iOS專案後,如果是Xcode 5,新建一個非Empty專案,都將會自動建立一個Main.storyboard,並將這個Storyboard設定為預設的UI介面。
手動建立一個Storyboard的方法是選擇新建一個檔案(Command+N),然後在左邊選擇User Interface,再在右邊的模版中選擇Storyboard。
然後選擇裝置型別(Device Family),可以選擇iPhone、iPad。iPhone表示這個介面是為iPhone裝置設計的,iPad表示這個介面是為iPad裝置設計的。
然後輸入檔名並儲存,我這裡儲存為User。
接下來就要將這個Storyboard設定為預設的UI管理器。有兩種方法,一種是在專案檔案管理器中選擇專案名稱,然後選擇General,然後設定Main Interface。
這裡選擇剛才建立的User.storyboard。
另一種方法是在程式碼中來完成的,開啟專案的AppDelegate.m檔案,修改- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法如下:
-
( BOOL )application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions |
{ |
//
Override point for customization after application launch. |
//
建立一個UIStoryboard物件 |
UIStoryboard
* storyboard = [UIStoryboard storyboardWithName:@ "User" bundle:nil]; |
//
將storyboard設定為要顯示的UI |
self.window.rootViewController
= [storyboard instantiateInitialViewController]; |
return YES; |
} |
為了能更好的顯示,我專案中設定的Main Interface為Main.storyboard,然後設定如上程式碼,可以看到哪個最後執行,或者說哪個優先順序更高。我還為這個User.storyboard添加了一個UIViewController,並在上面添加了一個UILabel。程式執行結果如下:
四、Storyboard中各個介面間的切換Segue
這裡我用到了我之前做的Main.storyboard了,所以參看第一關係張圖
1、類似於XIB的介面間切換
就是給定一個按鈕,然後為這個按鈕添加了一個Touchup in side事件,當用戶按下按鈕時觸發事件。新建一個ViewAController,並新增一個按鈕,命名為Jump ViewC,新建一個ViewCController,並在ViewCController中新增一個Label,更新文字為View C。介面如下:
注意了,這裡沒有用到Segue,只是為Jump ViewC按鈕新增一個onClick的事件處理方法如下:
-
(IBAction)onClick:(id)sender { |
//
通過Storyboard中的View的Identifier標籤來建立對應的ViewController |
|