你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> iOS中的 SB和XIB的前世今生

iOS中的 SB和XIB的前世今生

編輯:IOS編程技術

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

 

一、Interface Builder介紹

 

1、概念

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

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

 

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

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對象是按照方進去的順序排列的

 

2、作用及特點

 

IB給用戶提供了可視化的操作界面,可以很方便並且直觀的設計出用戶界面元素。IB提供的拖放面板,使用拖拽就可以方便的構建出UI界面。使用IB是可選的,因為所有控件都可以使用代碼來實現。

 

3、集成

 

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

 

4、Nib元素

 

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

 

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

 

5、Xib的出現

 

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

 

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

 

二、xib介紹

 

1、簡介

 

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

 

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

 

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

 

 

2、使用

 

(1)通過xib加載控件

 

<1>loadNibNamed 方法

 

 

(2)通過xib加載控制器

 

<1>initWithNibName: bundle:方法  (如果xib和控制器名字相同或近似,可以不用實例化)

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

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

 

 

3、優勢

 

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

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

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

 

 

4、問題

 

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

 

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

 

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

 

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

 

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

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

 

6、幾個和Xib相關的方法

 

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

 

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

 

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

 

三、storyBoard

 

1、 簡介

iOS5版本後,蘋果公司推出Storyboard,目前新創建工程時默認自帶Storyboard,可以說StoryBoard是未來的趨勢.

 

 1.什麼是Storyboard?

 

我們從字面可以理解為 故事板 Storyboard的是 ios5 的新特征 目的是代替歷史悠久的xib

 

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

如果要使用Storyboard特性,那麼AppDelegate必須繼承自UIResponder類, 之前則是繼承自NSObject類的,而且必須有一個不是UIOutlet類的Window屬性聲明才可以 

注意點: 當我們需要更換Stoard 我們需要把infor.plist Main interface 裡的東西 刪除 否則會報錯

 

2、特點

 

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

 

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

 

(3)默認storyBoard作為程序的主入口

 

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

 

(5)storyBoard中是展現控制器之間的關系。

 

3、優勢

 

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

 

(2)提高UI設計效率的同時,通過可視化界面,可以很清晰的反映出控制器之間的跳轉關系。

 

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

 

(4)UI設計中可以實時直觀的反映設計效果,由於代碼量較少,所以,bug產生的幾率也較低(代碼實現UI需要大量代碼)。

 

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

 

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

  

4、使用

 

(1)通過storyBoard加載控制器

 

<1> 創建UIStoryboard 對象: storyboardWithName:

 

<2> 通過storyBoard對象創建

instantiateInitialViewController;

    instantiateViewControllerWithIdentifier;

 

(2)通過storyBoard加載視圖,

 

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

 

<2> collection中的item注冊,也可以通過Prototype cells

 

5、問題

 

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

 

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

 

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

 

(4)由於沒有使用代碼設計控件,所以重用問題不靈活。

 

四、xib 和 Storyboard 的區別

 

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

 

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

       (2) storyboard是多個xib文件集合的描述文件,也采用xml格式。一個工程中可以有多個xib文件,一個xib文件對應著一個視圖控制器和多個視圖。而使用storyboard時,一個工程只需要一個主storyboard文件就可以了。因此,在包含多個視圖控制器的情況下,采用storyboard管理比較方便,而且storyboard還可以描述界面之間的導航關系。

 

五、使用storyboard的注意點。

使用Storyboard需注意:

1、如果要使用Storyboard特性,那麼AppDelegate必須繼承自UIResponder類, 之前則是繼承自NSObject類的,而且必須有一個不是UIOutlet類的Window屬性聲明才可以

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

3、StoryBoard中已經不允許有單個view的存在

 

六、簡述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/

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved