iOS中的 SB和XIB的前世此生

今天給你們介紹一下Apple開發中三種幾種經常使用的應用程序編寫方式:純代碼建立、使用storyboard/XIB。咱們都知道,純代碼編寫模式適合大型項目大規模使用,利於版本管理、追蹤改動以及代碼合併代碼重用性強,代碼後期維護方便快捷。可是咱們不可否認它開發週期長,代碼結構複雜,自動佈局AutoLayout困難等缺點,ios

 

1、Interface Builder介紹程序員

 

一、概念編程

Interface Builder蘋果平臺下用於設計和測試用戶界面的應用程序,簡稱IB。簡單理解,IB就是提供可視化設計環境。數組

Interface Builder,是用於蘋果公司 Mac OS X 操做系統的軟件開發程序,Xcode 套件的一部分xcode

 

Interface Builde :是可視化建立界面描述文件的工具,打開xib能夠看到xml的文件結構iview

Xcode.3.0 以前 Interface Build 建立的文件是二進制nib nib表明Next interface Builder 由於nib是二進制很差管理 也不方便版本控制xcode.3.0 以後 interface builder 使用了一種新的文件格式xib xib的意思是XML interface builder, xib 使用了XML 在工程編譯的時候在轉換成nib函數

 

xcode 4.0 以前 interface Builde 是一個獨立軟件, 而Xcode 4.0 是個大版本 界面被從新設計 interface Builder 被直接集成到xcode 工具

 

注意點: 當咱們用xib 會遇到 xib 添加到控制器view 中有時程序會崩潰 佈局

 

錯誤提示: unrecognized selector sent to instance 0x7ffae1c1b680'測試

 

這時咱們應注意xib裏控件有幾個 ,咱們加載xib 會以數組的形式加載 xib對象是按照方進去的順序排列的

 

二、做用及特色

 

IB給用戶提供了可視化的操做界面,能夠很方便而且直觀的設計出用戶界面元素。IB提供的拖放面板,使用拖拽就能夠方便的構建出UI界面。使用IB是可選的,由於全部控件均可以使用代碼來實現。

 

三、集成

 

Interface Builder工具是在iPhone SDK中提供的,應用於Mac OC 和iOS應用開發,從Xcode4開始,集成到了其中(以前是獨立的軟件)。

 

四、Nib元素

 

(1) Nib文件是保存由Interface Builder建立的對象及對象間關係的一種資源文檔,Nib 是 NeXT Interface Builder的縮寫。

 

(2)早期,IB使用Nib文件存儲控件資源,Nib自己是二進制文件。

 

五、Xib的出現

 

(1)自從Xcode 3.0 開始,蘋果提供Xib文件構建UI元素,本質是XML文本文件,能夠很方便的編輯。同時Xib能夠編譯爲Nib。

 

(2)Nib 和 Xib都是 Interface Builder 的圖形界面設計文檔。

 

2、xib介紹

 

一、簡介

 

(1)IB和xib是從iOS SDK初次面世開始就是捆綁在開發者工具套裝內的內容了(獨立),而到了Xcode 4以後更被直接集成到了Xcode中成爲了IDE的一部分。

 

(2)Xib是XML格式的文件。

 

(3)UIViewController生命週期函數loadView以前,Xib會轉化成可執行的nib文件

 

 

二、使用

 

(1)經過xib加載控件

 

<1>loadNibNamed 方法

 

 

(2)經過xib加載控制器

 

<1>initWithNibName: bundle:方法  (若是xib和控制器名字相同或近似,能夠不用實例化)

<2>設置xib的身份檢查器中的關聯

<3>設置File's Owner ,拖動到View上

 

 

三、優點

 

(1)相比純代碼,大大縮短了UI界面搭建的時間,提升了開發效率。

(2)可視化的效果,更直觀的設計

(3)在版本管理上和純代碼的差別並非很大,易讀易維護。   

 

 

四、問題

 

(1)Xib沒法進行邏輯判斷。

 

(2)很難在運行時進行配置,Xib在使用時,常常要經過代碼的補充,來完成功能實現。

 

(3)多人開發中經過代碼修改Xib的屬性,可能形成混亂和不可預計的問題。

 

(4)從程序員角度,可讀性較差。不利於統一管理和維護。使用SVN等代碼管理工具時,Xib會產生無用的記錄,以及版本更新的缺陷。從Xcode5開始,蘋果對這一方面問題進行了優化,好比在版本管理上,也能夠很好的查找修改記錄了。

 

(5) xib中的設置每每並不是最終設置,UI設計會被代碼所覆蓋

      (若是選擇xib,那麼要儘可能將xib的工做和代碼的工做隔離開來:可以使用xib完成的內容就統一使用xib來作,而不要說三個Label其中兩個在 xib設置了字體而另外一個卻在代碼中完成。儘可能僅保持必要的、較少的IBOutletIBAction會是一個好方法。)

 

六、幾個和Xib相關的方法

 

(1)loadNibNamed:    owner:   options    加載Xib控件

 

(2)aweakFromNib 經過Xib加載控件,會調用關聯類中的此方法

 

(3)initWithCoder    經過Xib加載控件,會調用關聯類中的此方法

 

3、storyBoard

 

一、 簡介

iOS5版本後,蘋果公司推出Storyboard,目前新建立工程時默認自帶Storyboard,能夠說StoryBoard是將來的趨勢.

 

 1.什麼是Storyboard?

 

咱們從字面能夠理解爲 故事板 Storyboard的是 ios5 的新特徵 目的是代替歷史悠久的xib

 

Storyboard 是多個xib文件集合的描述文件,也採用xml格式

若是要使用Storyboard特性,那麼AppDelegate必須繼承自UIResponder類, 以前則是繼承自NSObject類的,並且必須有一個不是UIOutlet類的Window屬性聲明才能夠 

注意點: 當咱們須要更換Stoard 咱們須要把infor.plist Main interface 裏的東西 刪除 不然會報錯

 

二、特色

 

(1)提供頁面間新的挑戰方式:segue

 

(2)描述了若干窗體、組件、Auto Layout 約束等關鍵信息。

 

(3)默認storyBoard做爲程序的主入口

 

(4)Auto Layout 跟 StoryBoard 的配合使用,能夠大幅提升 UI 開發效率,並準確提供出各控件的位置和約束。

 

(5)storyBoard中是展示控制器之間的關係。

 

三、優點

 

(1)storyboard在IOS5引入,是xib集合的描述文件,自己也是xml格式;提供了nib 和 xib 的集中管理,更直觀的展示出他們的關係。

 

(2)提升UI設計效率的同時,經過可視化界面,能夠很清晰的反映出控制器之間的跳轉關係。

 

(3)在storyBoard中能夠提供簡單的頁面跳轉,拖拽就能夠設置成功。

 

(4)UI設計中能夠實時直觀的反映設計效果,因爲代碼量較少,因此,bug產生的概率也較低(代碼實現UI須要大量代碼)。

 

(6)代碼量少,開發週期短

 

(7)是新建項目時候的默認配置,表明着蘋果之後的方向和重心將傾向於可視化編程。

  

四、使用

 

(1)經過storyBoard加載控制器

 

<1> 建立UIStoryboard 對象: storyboardWithName:

 

<2> 經過storyBoard對象建立

instantiateInitialViewController;

    instantiateViewControllerWithIdentifier;

 

(2)經過storyBoard加載視圖,

 

<1> 在Prototype cells 中設置樣式,和reusedID,能夠實現cell重用。

 

<2> collection中的item註冊,也能夠經過Prototype cells

 

五、問題

 

(1)存在Xib設計中相同的一些問題,好比維護的不方便,多人開發的不便利,沒有邏輯判斷等等。

 

(2)最大問題就是多人協做開發,UI控件都在一個storyBoard文件中。

 

(3)由於是多個Xib,多以會更大一些,加載會慢一些。

 

(4)因爲沒有使用代碼設計控件,因此重用問題不靈活。

 

4、xib 和 Storyboard 的區別

 

共同點 : 都用來描述軟件的界面 都用Interface Buile工具編譯

 

不一樣點 :(1)xib是輕量級 用來描述局部的UI界面;而Storyboard 是重量級 用來描述整個軟件的多個界面 而且 能展現多個界面之間的跳轉關係

       (2) storyboard是多個xib文件集合的描述文件,也採用xml格式。一個工程中能夠有多個xib文件,一個xib文件對應着一個視圖控制器和多個視圖。而使用storyboard時,一個工程只須要一個主storyboard文件就能夠了。所以,在包含多個視圖控制器的狀況下,採用storyboard管理比較方便,並且storyboard還能夠描述界面之間的導航關係。

 

5、使用storyboard的注意點。

使用Storyboard需注意:

一、若是要使用Storyboard特性,那麼AppDelegate必須繼承自UIResponder類, 以前則是繼承自NSObject類的,並且必須有一個不是UIOutlet類的Window屬性聲明才能夠

二、StoryBoard專有的preview功能,以及AutoLayout的功能。

三、StoryBoard中已經不容許有單個view的存在

 

6、簡述XIB和storyboard的使用方法。

 

xib使用過程:

1. 首先使用interface builder 新建一個uiview的.xib文件。

2. 向新建的uiview的.xib文件添加須要的控件。

3. 定義一個繼承自uiview的派生類。將上面新建的xib文件的派生類改成新定義的繼承自uiview的派生類。

4. 將在xib文件上添加的控件與繼承自uiview的派生類創建鏈接IBOoutlet。

5. 在須要生成uiview的地方添加一下代碼:

NSArray* nibView =  [[NSBundlemainBundle] loadNibNamed:@"xib文件名字"owner:nil options:nil];  

UIView * backupSearchView = [nibView lastObject];

 

storyboard使用過程:

// 1.建立窗口

   self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

  

   // 2.建立控制器[storyboard故事板]

   // 2.1 先加載故事板文件

   UIStoryboard *boss = [UIStoryboard storyboardWithName:@"CZBoss" bundle:nil];

  

   // 2.2 實例化初始化控制器[帶箭頭]

//   UIViewController *vc = [boss instantiateInitialViewController];

   //根據表示符,實例化控制器

   UIViewController *vc = [boss instantiateViewControllerWithIdentifier:@"blue"];

  

   // 3.設置窗口的根控制器

   self.window.rootViewController = vc;

  

   // 4.把窗口做爲主窗口並可見

   [self.window makeKeyAndVisible];

 

參考資料:http://news.cnblogs.com/n/124292/

相關文章
相關標籤/搜索