xib和Storyboard (引用)

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ì)控件,所以重用問題不靈活毁葱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垫言,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倾剿,更是在濱河造成了極大的恐慌筷频,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前痘,死亡現(xiàn)場(chǎng)離奇詭異凛捏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芹缔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門坯癣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人最欠,你說我怎么就攤上這事示罗〕兔ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蚜点,是天一觀的道長轧房。 經(jīng)常有香客問我,道長绍绘,這世上最難降的妖魔是什么奶镶? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮陪拘,結(jié)果婚禮上厂镇,老公的妹妹穿的比我還像新娘。我一直安慰自己藻丢,他們只是感情好剪撬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悠反,像睡著了一般残黑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斋否,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天梨水,我揣著相機(jī)與錄音,去河邊找鬼茵臭。 笑死疫诽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旦委。 我是一名探鬼主播奇徒,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缨硝!你這毒婦竟也來了摩钙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤查辩,失蹤者是張志新(化名)和其女友劉穎胖笛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宜岛,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡长踊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萍倡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片身弊。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佑刷,到底是詐尸還是另有隱情莉擒,我是刑警寧澤酿炸,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布瘫絮,位于F島的核電站,受9級(jí)特大地震影響填硕,放射性物質(zhì)發(fā)生泄漏麦萤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一扁眯、第九天 我趴在偏房一處隱蔽的房頂上張望壮莹。 院中可真熱鬧,春花似錦姻檀、人聲如沸命满。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胶台。三九已至,卻和暖如春杂抽,著一層夾襖步出監(jiān)牢的瞬間诈唬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工缩麸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铸磅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓杭朱,卻偏偏與公主長得像阅仔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弧械,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容