系更直觀地展現出來,並提供了一種新的頁面間跳轉方式 segue。app
StoryBoard 的本質是一個 XML 文件,描述了若干窗體、組件、Auto Layout 約束等關鍵信息。學習
可是,咱們應該認識到一個更重要的本質:使用 StoryBoard 的 iOS 項目均以初始化 StoryBoard 文件做爲整個程序的初始化入口,UIViewController 類是因爲被 StoryBoard 綁定而初始化,從而開始運行的。從下面兩個地方能夠找到蛛絲馬跡:3d
奇怪的 bugcode
初學 iOS 開發的時候,若是使用了 StoryBoard,你們可能遇到過這個奇怪的 bug,頁面全黑:blog
若是你們跟我同樣純靠找資料自學而沒有人教的話,必定出現過死活找不到緣由而新建一個項目的尷尬狀況吧 o(╯□╰)o,其實祕密在這裏:開發
這表示這個窗體是此 StoryBoard 的初始窗體的意思,這樣 APP 在啓動之後,會先啓動主 StoryBoard,主 StoryBoard 會啓動它的初始窗體,初始窗體啓動跟他綁定的類,這樣 APP 就啓動完成了。get
多 StoryBoard 最佳實踐it
託福喵 1.0 版是我第一個上架的項目,只用了初始化項目時創建的那惟一的 Main.storyboard,裏面有二十幾個窗體,在 Xcode 裏每次點擊打開都要等五秒才能徹底渲染完畢,並且 Segue 線交錯縱橫,很是凌亂。這顯然不是個好的組織方式。io
我如今正在重寫的託福喵第二版已經採用了多 StoryBoard 的解決方案,把一些獨立的窗體組合放到一塊兒使用一個 StoryBoard 進行組織,好比登錄註冊的幾個窗體,考試界面的幾個窗體,關於咱們的幾個窗體等。下面咱們將一塊兒學習如何使用多 StoryBoard。編譯
新建第二個 StoryBoard
以下圖:
給 Second.storyboard 拖入一個 View Controller:
如何調用 Second.storyboard 中的窗體?
首先,編譯項目,咱們獲得以下警告:
這個警告的意思是,這個窗體沒有入口,沒法被觸達。如何讓他可以被觸達?兩種方式:
設置爲該 StoryBoard 的初始窗體:
給該窗體設置一個 StoryBoard ID:
可以被觸達以後,讓咱們用代碼調用他們:
① 做爲初始窗體
let vc = UIStoryboard(name: "Second", bundle: nil).instantiateInitialViewController() as! UIViewController self.navigationController?.pushViewController(vc, animated: true)
② 設置了 StoryBoard ID
let vc = UIStoryboard(name: "Second", bundle: nil).instantiateViewControllerWithIdentifier("First") as! UIViewController self.navigationController?.pushViewController(vc, animated: true)
固然,也能夠用 self.presentViewController 調用他們。