XIB
2016年04月25日?iOS開發(fā)經(jīng)驗(yàn)? 共 3625字 ? 字號(hào)小中大?評(píng)論關(guān)閉
XIB
Storyboard 和 xib
1.1 Storyboard故事板 Storyboard的是 ios5 的新特征 目的是代替歷史悠久的xib.Storyboard?是多個(gè)xib文件集合的描述文件,也采用xml格式.如果要使用Storyboard特性人乓,那么AppDelegate必須繼承自UIResponder類驻售, 之前則是繼承自NSObject類的魂迄,而且必須有一個(gè)不是UIOutlet類的Window屬性聲明才可以
>> 注意點(diǎn): 當(dāng)我們需要更換Stoard 我們需要把infor.plist Main interface 里的東西 刪除 否則會(huì)報(bào)錯(cuò)
>>優(yōu)點(diǎn) : stroryboard 可以幫助我們解決很多重復(fù)的跳轉(zhuǎn)方法 可以節(jié)省很多時(shí)間.代碼量少 開發(fā)周期短.可以看到每個(gè)ViewController的布局樣式 也可以明確地知道各個(gè)ViewController的跳轉(zhuǎn)關(guān)系
>>缺點(diǎn)?:團(tuán)隊(duì)開發(fā)不便
1.2 storyboard 的使用
// 1.創(chuàng)建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 2.創(chuàng)建控制器[storyboard故事板]
// 2.1 先加載故事板文件
UIStoryboard *boss = [UIStoryboard storyboardWithName:@"CZBoss" bundle:nil];
// 2.2 實(shí)例化初始化控制器[帶箭頭]
//UIViewController *vc = [boss instantiateInitialViewController];
//根據(jù)表示符,實(shí)例化控制器
UIViewController *vc = [boss instantiateViewControllerWithIdentifier:@"blue"];
// 3.設(shè)置窗口的根控制器
self.window.rootViewController = vc;
// 4.把窗口作為主窗口并可見
[self.window makeKeyAndVisible];
2 Xib
> >Xcode.3.0 之前 Interface Build 創(chuàng)建的文件是二進(jìn)制nib nib代表Next interface Builder 因?yàn)閚ib是二進(jìn)制不好管理 也不方便版本控制 ?xcode.3.0 之后 interface builder 使用了一種新的文件格式xib xib的意思是XML interface builder, xib 使用了XML 在工程編譯的時(shí)候在轉(zhuǎn)換成nib
>> xcode 4.0 之前 interface Builde 是一個(gè)獨(dú)立軟件, 而Xcode? 4.0 是個(gè)大版本 界面被重新設(shè)計(jì) interface Builder 被直接集成到xcode
注意點(diǎn): 當(dāng)我們用xib 會(huì)遇到 xib 添加到控制器view 中有時(shí)程序會(huì)崩潰
錯(cuò)誤提示: unrecognized selector sent to instance 0x7ffae1c1b680'
這時(shí)我們應(yīng)注意xib里控件有幾個(gè) ,我們加載xib 會(huì)以數(shù)組的形式加載 xib對(duì)象是按照放進(jìn)去的順序排列的
>> Xib 的優(yōu)點(diǎn) :
> 開發(fā)速度快
> 在版本管理上和純代碼的差異并不是很大 易讀易維護(hù)
缺點(diǎn) :
xib中設(shè)置往往并非最終設(shè)置 UI設(shè)計(jì)會(huì)被代碼所覆蓋
(如果選擇xib,那么要盡量將xib的工作和代碼的工作隔離開來:能夠使用xib完成的內(nèi)容就統(tǒng)一使用xib 來做 而不要說三個(gè)label其中倆個(gè)在xib設(shè)置字體 而另一個(gè)卻在代碼設(shè)置 盡量僅保持必要的 較少的IBOutelet 和IBAction)
3 xib 和?Storyboard 的區(qū)別
xib 是輕量級(jí)的
Storyboard?是重量級(jí)的
共同點(diǎn) : 都用來描述軟件的界面 都用Interface Buile工具編譯
不同點(diǎn) :
xib是輕量級(jí) 用來描述局部的UI界面
Storyboard?是重量級(jí) 用來描述整個(gè)軟件的多個(gè)界面 并且 能展示多個(gè)界面之間的跳轉(zhuǎn)關(guān)系
4 補(bǔ)充:
一盗扇、Interface Builder介紹
1、概念
Interface Builder蘋果平臺(tái)下用于設(shè)計(jì)和測(cè)試用戶界面的應(yīng)用程序禀忆,簡稱IB士葫。簡單理解糕再,IB就是提供可視化設(shè)計(jì)環(huán)境。
2、作用及特點(diǎn)
IB給用戶提供了可視化的操作界面持际,可以很方便并且直觀的設(shè)計(jì)出用戶界面元素沃琅。IB提供的拖放面板,使用拖拽就可以方便的構(gòu)建出UI界面蜘欲。使用IB是可選的益眉,因?yàn)樗锌丶伎梢允褂么a來實(shí)現(xiàn)。
3姥份、集成
Interface Builder工具是在iPhone SDK中提供的郭脂,應(yīng)用于Mac OC 和iOS應(yīng)用開發(fā),從Xcode4開始澈歉,集成到了其中(之前是獨(dú)立的軟件)展鸡。
4、Nib元素
(1)?Nib文件是保存由Interface Builder創(chuàng)建的對(duì)象及對(duì)象間關(guān)系的一種資源文檔埃难,Nib 是 NeXT Interface Builder的縮寫娱颊。
(2)早期,IB使用Nib文件存儲(chǔ)控件資源凯砍,Nib本身是二進(jìn)制文件箱硕。
5、Xib的出現(xiàn)
(1)自從Xcode 3.0 開始悟衩,蘋果提供Xib文件構(gòu)建UI元素剧罩,本質(zhì)是XML文本文件,可以很方便的編輯座泳。同時(shí)Xib可以編譯為Nib惠昔。
(2)Nib 和 Xib都是 Interface Builder 的圖形界面設(shè)計(jì)文檔。
二挑势、xib介紹
1镇防、簡介
(1)IB和xib是從iOS SDK初次面世開始就是捆綁在開發(fā)者工具套裝內(nèi)的內(nèi)容了(獨(dú)立),而到了Xcode 4之后更被直接集成到了Xcode中成為了IDE的一部分潮饱。
(2)Xib是XML格式的文件来氧。
(3)UIViewController生命周期函數(shù)loadView之前,Xib會(huì)轉(zhuǎn)化成可執(zhí)行的nib文件
2香拉、使用
(1)通過xib加載控件
<1>loadNibNamed 方法
(2)通過xib加載控制器
<1>initWithNibName: bundle:方法? (如果xib和控制器名字相同或近似啦扬,可以不用實(shí)例化)
<2>設(shè)置xib的身份檢查器中的關(guān)聯(lián)
<3>設(shè)置File's Owner ,拖動(dòng)到View上
3凫碌、優(yōu)勢(shì)
(1)相比純代碼扑毡,大大縮短了UI界面搭建的時(shí)間,提高了開發(fā)效率盛险。
(2)可視化的效果瞄摊,更直觀的設(shè)計(jì)勋又。
4、問題
(1)Xib無法進(jìn)行邏輯判斷换帜。
(2)很難在運(yùn)行時(shí)進(jìn)行配置赐写,Xib在使用時(shí),經(jīng)常要通過代碼的補(bǔ)充膜赃,來完成功能實(shí)現(xiàn)挺邀。
(3)多人開發(fā)中通過代碼修改Xib的屬性,可能造成混亂和不可預(yù)計(jì)的問題跳座。
(4)從程序員角度端铛,可讀性較差。不利于統(tǒng)一管理和維護(hù)疲眷。使用SVN等代碼管理工具時(shí)禾蚕,Xib會(huì)產(chǎn)生無用的記錄,以及版本更新的缺陷狂丝。從Xcode5開始换淆,蘋果對(duì)這一方面問題進(jìn)行了優(yōu)化,比如在版本管理上几颜,也可以很好的查找修改記錄了倍试。
5、幾個(gè)和Xib相關(guān)的方法
(1)loadNibNamed:??? owner: ? options??? 加載Xib控件
(2)aweakFromNib 通過Xib加載控件蛋哭,會(huì)調(diào)用關(guān)聯(lián)類中的此方法
(3)initWithCoder??? 通過Xib加載控件县习,會(huì)調(diào)用關(guān)聯(lián)類中的此方法
三、storyBoard
1谆趾、簡介
(1)storyboard在IOS5引入躁愿,是xib集合的描述文件,本身也是xml格式沪蓬。
(2)提供了nib 和 xib 的集中管理彤钟,更直觀的展現(xiàn)出他們的關(guān)系。
(3)通過可視化界面跷叉,設(shè)計(jì)UI的方式逸雹。
2、特點(diǎn)
(1)提供頁面間新的挑戰(zhàn)方式:segue
(2)描述了若干窗體性芬、組件峡眶、Auto Layout 約束等關(guān)鍵信息。
(3)默認(rèn)storyBoard作為程序的主入口
(4)Auto Layout 跟 StoryBoard 的配合使用植锉,可以大幅提高 UI 開發(fā)效率,并準(zhǔn)確提供出各控件的位置和約束峭拘。
(5)storyBoard中是展現(xiàn)控制器之間的關(guān)系。
3喘垂、優(yōu)勢(shì)
(1)提高UI設(shè)計(jì)效率的同時(shí)庭呜,可以很清晰的反映出控制器之間的跳轉(zhuǎn)關(guān)系。
(2)在storyBoard中可以提供簡單的頁面跳轉(zhuǎn)搬男,拖拽就可以設(shè)置成功。
(3)UI設(shè)計(jì)中可以實(shí)時(shí)直觀的反映設(shè)計(jì)效果彭沼,由于代碼量較少缔逛,所以,bug產(chǎn)生的幾率也較低(代碼實(shí)現(xiàn)UI需要大量代碼)姓惑。
4褐奴、使用
(1)通過storyBoard加載控制器
<1> 創(chuàng)建UIStoryboard 對(duì)象: storyboardWithName:
<2> 通過storyBoard對(duì)象創(chuàng)建
instantiateInitialViewController;
instantiateViewControllerWithIdentifier;
(2)通過storyBoard加載視圖,
<1> 在Prototype cells 中設(shè)置樣式于毙,和reusedID敦冬,可以實(shí)現(xiàn)cell重用。
<2> collection中的item注冊(cè)唯沮,也可以通過Prototype cells
5脖旱、問題
(1)存在Xib設(shè)計(jì)中相同的一些問題,比如維護(hù)的不方便介蛉,多人開發(fā)的不便利萌庆,沒有邏輯判斷等等。
(2)最大問題就是多人協(xié)作開發(fā)币旧,UI控件都在一個(gè)storyBoard文件中踊兜。
(3)因?yàn)槭嵌鄠€(gè)Xib,多以會(huì)更大一些佳恬,加載會(huì)慢一些捏境。
(4)由于沒有使用代碼設(shè)計(jì)控件,所以重用問題不靈活毁葱。