寫這篇的起因也是由於教材。在粗略地掃完Objective-C的教程後,就找了一本《Xcode 4 iOS Development Beginner’s Guide》來看。翻到第一個範例,對著範例開始照搬。做到“點擊項目裡的xib”檔案的那一步時傻眼了。。。蝦米?項目裡沒有xib檔案?
最新版的XCode裡預設在建立一個iOS項目時,會勾選使用storyboard的選項。如果勾選了這個選項,在iOS項目裡就不會包含.xib檔案,而是一個storyboard檔案。如果不勾選這個選項的話,還是會按照老方法建立xib檔案。 在storyboard出現之前,每個UIViewController都有一個對應的.xib檔案。 storyboard是在iOS5 SDK中引入的。一個storyboard通常是包含了N個screen的檔案,表現出螢幕之間切換的“流”。如果要用理科生的術語來說,就是狀態機器吧。 參考這篇:http://stackoverflow.com/questions/9083759/what-are-the-benefits-of-using-storyboards-instead-of-xib-files-in-ios-programmi ,Storyboard是:1. 包含所有Scene的容器(ViewController,Nav Controller,TabBar Controller等等)2. 管理Scene之間的所有串連和切換(術語被稱為Segue['segweɪ],只需要從一個View Controller使用Ctrl+拖動到另一個View Controller,就可以建立一個新的切換)3. 管理Controller之間的通訊4. 從nib檔案那裡無法獲得的應用“流” (xib就是沒有編譯的nib。xib在編譯時間會變成nib,用於部署。在IB(Interface Builder)3引入。xib相比nib的優點是一個flat的檔案而非一個二進位檔案,可以用來版本控制。)5. 能減少檔案總數 關於storyboard有一篇挺詳細的文章:http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1 裡面提到Storyboard也有缺點:Storyboard編輯器不如IB強大。如果討厭Interface Builder,喜歡自己編程實現所有UI的(這是在說我嗎?),不太會喜歡Storyboard。Storyboard比較適合那種喜歡寫越少代碼越好的。 =============順便說一下,如果要將一個xib檔案和一個viewcontroller類檔案關聯的話,可以用如下步驟:1. 開啟xib檔案2. 點擊PlaceHolder裡的File's Owner(插一句:我用的是英文版,所以術語都是用英文。以後也不會專門翻譯為中文)3. 點擊右側欄的第三個按鈕,在"Identity Inspector"那裡修改Custom Class的Class名 (P.S. XCode用全圖形化的關聯方式來處理這樣ViewController與xib,以及ViewController上的各種元素和property及函數的對應。根據之前淺嘗則止的經驗,遊戲引擎Unity3D也是如此。老實說我個人還是更喜歡VS的處理方式。。。讓人感覺比較實在吧。
如果要查看那些圖形化的操作做了些什麼,可以右鍵點擊xib檔案,選擇open as-》Source Code。可以看到其實背後還是用XML的方式來管理關聯。不過一堆類似"1050106229","354080509"的reference字串,顯然根本不是用來給人類看的。。。)