一天一點xib:4簡單使用xib

引言

之前說了xib的優(yōu)缺點宣鄙、如何應(yīng)用、解決文件沖滞诺,算掃了xib學(xué)習(xí)上的一只攔路虎,現(xiàn)在我們就開始具體的學(xué)習(xí)一下xib的簡單使用媳搪。

建立Demo工程

新建基于single view application的工程铭段,取名叫xibDemo,建好之后就有一個Main.storyboard文件秦爆,因為SB功能比xib強大序愚,這里我們先講xib的用法,再講SB的用法等限,學(xué)會了xib爸吮,就已經(jīng)學(xué)了70%的SB芬膝。一天一點xib:2初識xib說過:

xib的使用一般基于UIViewController或UIView類的子類

我們現(xiàn)在分別創(chuàng)建他們的子類SecondVC和TestView極其對應(yīng)的xib文件。

基于UIViewController的xib

點擊SecondVC.xib形娇,為了顯示全锰霜、演示方便,去掉size classes功能(具體方法參見:一天一點xib:2初識xib)

第一個標(biāo)簽

主要介紹了xib文件的一些基本信息桐早,一般不用修改癣缅。是否開啟auto layout、size classes哄酝、launch screen等功能在interface builder document菜單下友存,這幾個功能以后會詳細介紹。

Localization菜單是與國際化相關(guān)的陶衅,一天一點xib:8高冷的xib中有介紹屡立,這里只介紹xib的常用功能。

下面紅色區(qū)域是xib可操作的對象搀军,這里不隨上面標(biāo)簽切換而切換膨俐,固定顯示,是xib操作中的重點區(qū)域罩句,包括各種UI控件焚刺、手勢、Controller等等门烂,大家應(yīng)該仔細看看里面的東西檩坚。

第二個標(biāo)簽

是一些幫助說明之類的東西,可以忽略诅福,應(yīng)用中不會用到

第三個標(biāo)簽

該標(biāo)簽中最經(jīng)常用到的就是Custom Class菜單中的Class拖叙,一般就是將你的類與xib文件掛鉤薯鳍,我們這里的SecondVC.xib中的View如果要設(shè)置成你自定義的View的話就改變這個屬性挖滤,我們將一個xib與一個UIView子類進行綁定的時候也是改變這個屬性的斩松,這是一個很重要的屬性。

User Define Runtime Attribute是一個不經(jīng)常用乳幸,但是很有用的功能粹断,一天一點xib:8高冷的xib中有詳細說明瓶埋。

其他菜單都不常用,其中Accessibility是支持給殘疾人開發(fā)更利于他們使用的app的時候用到的曾撤。

第四個標(biāo)簽

這個是屬性標(biāo)簽,是xib中最重要的一個標(biāo)簽兵多,對應(yīng)的是一個控件的可設(shè)置的一些屬性剩膘,根據(jù)你選擇的控件不同怠褐,屬性標(biāo)簽中呈現(xiàn)出來的東西也是不同的奈懒,這里的屬性與代碼中設(shè)置的基本相同磷杏,大家可以試試,如果大家對哪個控件不熟悉慈格,可以拖出一個控件到View上浴捆,然后切換到該標(biāo)簽选泻,看看里面都有什么屬性滔金,然后改變他們的屬性值餐茵,運行忿族,看看變化道批,這樣可以快速、簡單的學(xué)習(xí)一個控件椭岩,或者以xml的形式去看看xib的代碼判哥。

屬性標(biāo)簽是最經(jīng)常和我們打交道的一個標(biāo)簽塌计。

顏色設(shè)置這里有幾個小技巧:

1.在Hex Color里設(shè)置代表一種顏色的十六進制數(shù)

2.通過Opacity改變顏色的透明度锌仅。

注意:改變顏色的透明度有時候很重要热芹,它與直接改變view的alpha產(chǎn)生的效果不同剿吻,改變view的alpha,它的subView的alpha也會改變纺棺,而改變顏色的alpha祷蝌,是不影響自己的subView的巨朦。

3.點擊左下角的吸管,移動它到你需要設(shè)置的顏色處拄查,點擊鼠標(biāo)堕扶,此時顏色就變成了你需要的那種顏色稍算,十分方便糊探、快捷科平。

UIButton等控件是有不同狀態(tài)的:Default匠抗、Highlighted汞贸、Selected矢腻、Disabled多柑,可以針對不同的狀態(tài)設(shè)置不同的屬性值竣灌,還可以設(shè)置shadow初嘹、edge等屬性沮趣,十分方便。

第五個標(biāo)簽

這是與控件frame相關(guān)的標(biāo)簽,該標(biāo)簽里的屬性隨著控件類型不同而變化类溢,最典型的例子是Cell谴蔑,是否開啟auto layout也會影響該標(biāo)簽中的屬性隐锭,但一般常用的就是設(shè)置x钦睡、y荞怒、Width褐桌、Height,我們給一個控件添加的layout約束也都在這里顯示呛踊,如果在控件上直接修改不方面的話谭网,可以到這個標(biāo)簽下查看和修改,十分方便锥涕。

第六個標(biāo)簽

該標(biāo)簽主要負(fù)責(zé)xib文件和類的源文件交互用搏嗡,都是“連線”相關(guān)的操作,例如UITableView的delegate與datasoutce尺栖,IBAction、IBOutlet等相關(guān)叉橱,如果我們用了xib的頁面產(chǎn)生了莫名其妙的crash那你就要看看是不是自己的“連線”有問題了掐松。

“連線”是xib中最為重要的東西,在講“連線”之前杠愧,先說一個很重要流济、但又不容易說清的東西:Files Owner袭灯。

Files Owner指這個xib文件的所屬文件是誰,簡單的說是xib文件和誰建立起交互姨丈,用戶通與該xib呈現(xiàn)的頁面進行交互的時候,誰來處理背后的邏輯歼争。具體來講xib文件能拖動“連線”到哪個源文件中去建立IBAction俩莽、IBOutlet、delegate出刷、datasource等。

一般基于View創(chuàng)建的xib的Files Owner都指定為一個VC屁柏。基于VC創(chuàng)建的xib裸删,創(chuàng)建的時候系統(tǒng)就已經(jīng)把該xib文件的Files Owner指向了該VC,一般這種情況就不對Files Owner做修改了匕荸。

設(shè)置Files Owner也是通過之前說的很重要的第三個標(biāo)簽下的Custom Class->Class來操作的,F(xiàn)iles Owner践惑、Custom Class的深入了解不是一蹴而就的,要在不斷地學(xué)習(xí)和應(yīng)用中去體會侦铜,后面會有例子涉及到他們到時候認(rèn)識會更深钉稍。

IBAction:

“連線”的一種烈掠,用于標(biāo)記方法瘾蛋,此方法是將Files Owner中的方法,與xib中的某個對象通過“連線”建立起關(guān)系取董。該“連線”就相當(dāng)于在代碼中加入了addTarget等方法,等到xib顯示的對象與用戶發(fā)生交互時蹂午,就會調(diào)用IBAction修飾的這個方法。

建立IBAction連線的方法:

1.選中需要連線的對象晚胡,按住control鍵,拖動該控件到Files Owner類的@implementatio中松手忿檩,填寫方法名即可沙咏。

2.先在@implementatio中定義一個方法,在返回值中寫IBAction,然后點擊前面的空心圓理盆,拖動到xib的對象上猿规,兩者就建立了“連線”的關(guān)系蘸拔。

查看xib中某個對象的“連線關(guān)系”:

1.選中某個對象积担,右鍵鼠標(biāo)先誉。

xib4_12.jpeg

注意:有時一個“連線”產(chǎn)生的crash可能是由于你連線錯誤而產(chǎn)生的,例如一個Button铃芦,你線的Events卻是valueChanged:這樣就產(chǎn)生crash,而這種情況往往是Xcode自動選擇了不對的Event咧虎,之前Xcode版本中總會有這樣的問題砰诵,現(xiàn)在的Xcode基本上沒有這樣的問題了总寒,這里要注意看Event的類型,鏈接的selector是否是匹配的贪薪。

2.在第六個標(biāo)簽中直接查看。

IBOutlet

也是“連線”的一種囱怕,用于標(biāo)記屬性或變量,此方法將Files Owner中的屬性或字段台丛,與xib中的某個對象通過“連線”建立起關(guān)系。

IBOutlet建立“連線”與查看“連線”的方法與IBAction相同侠坎。但要注意的是:如果拖動“線”到@interface里实胸,就生成屬性,如果拖動到@interface{}里或者拖動“線”到@implementatio中的{}里就生成變量门躯。

這里簡單說一下:在@implementation中{}里寫變量和在@interface XXClass()(匿名Category)里的{}中寫變量是一樣的宁否,都是匿名的。

@interface ViewController () {
    NSString *_name;
}
@end

@implementation ViewController {
    NSString *_anotherName;
}

- (void)viewDidLoad {
    [super viewDidLoad];
}
@end

注:要刪除連線台谊,不僅要把Files Owner中的代碼刪除,還要找到xib中對應(yīng)的對象盐须,右鍵點擊x刪除贼邓,或直接選擇第六個標(biāo)簽點擊x刪除。

建立delegate统舀、datasource和tableView的“連線”:


用xib建立delegate、datasource和tableView的“連線”描融,就相當(dāng)于在Files Owner中寫了如下代碼:

_testTableView.delegate = self; 
_testTableView.datasource = self;

值得借鑒的點:

這里值得我們借鑒的一點在于:基于View創(chuàng)建的xib,是可以“連線”到自己View所在類中的年叮,如果給該xib設(shè)置了Files Owner的屬性后只损,可以同時“連線”到Files Owner的類中叮叹。

這有什么用呢?
我們可能會遇到這種情況:要封裝一個View為一個單獨的類携冤,該View是可交互的曾棕,點擊后翘地,要發(fā)生變化子眶,同時又要把交互的事件傳遞給VC,如果用代碼的話粤咪,就要把事件從View類傳遞給VC類宪塔,而如果你封裝的類用了xib,那么事情就簡單多了,同時“連線”到View類和自己Files Owner類對應(yīng)的VC中蜜托,在View類中處理UI的變化,在VC中處理邏輯,而不需要任何事件的傳遞重挑,當(dāng)用戶交互的時候嗓化,這兩根“連線”都會被回調(diào)。

基于UIView的xib

基于UIView的xib幾乎與基于UIViewController的一樣谬哀,每個標(biāo)簽顯示的東西都是差不多的刺覆。
要切記初始化View不走initWithFrame:而是走initWithCoder:即可。

小小技巧

可以用command + c玻粪、command + v對控件進行復(fù)制粘貼隅津,但粘貼后的控件復(fù)制了原有控件的所有屬性充蓝,包括所有的“連線”协怒,如果一個login的button“連線”了一個回調(diào)函數(shù)-(void)login;我們復(fù)制了這個button起名為register,但是點擊該按鈕,它還是會調(diào)用-(void)login;這通常不是我們想要的沮翔,所以在復(fù)制控件之后要斷了它之前的所有“連線”承二。初學(xué)者尤其要切記。

再次強調(diào):在使用xib過程中產(chǎn)生了一些Crash袁滥,首先檢查的就是控件的“連線”是否正確嵌赠。

總結(jié)

就此我們已經(jīng)介紹了4篇關(guān)于xib的東西彼硫,已經(jīng)可以對xib進行簡單的應(yīng)用了缺虐,xib使用的重點就是右邊欄下部的可操作對象腰涧,和他們對應(yīng)的六個標(biāo)簽、及其xib的使用方法关划。

歡迎大家和我交流溝通踊赠,若文章中有錯誤和紕漏鸽斟,懇請指正立倍,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖规丽,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵倦,死亡現(xiàn)場離奇詭異掠哥,居然都是意外死亡,警方通過查閱死者的電腦和手機煞抬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門囊卜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事认罩。” “怎么了胁附?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悼沈。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么亲铡? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上嗤朴,老公的妹妹穿的比我還像新娘。我一直安慰自己犬绒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布棒搜。 她就那樣靜靜地躺著翠拣,像睡著了一般恼琼。 火紅的嫁衣襯著肌膚如雪昂验。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天侥袜,我揣著相機與錄音,去河邊找鬼备韧。 笑死闽烙,一個胖子當(dāng)著我的面吹牛很魂,可吹牛的內(nèi)容都是我干的凡纳。 我是一名探鬼主播暴氏,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灵嫌,長吁一口氣:“原來是場噩夢啊……” “哼寿羞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赂蠢,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绪穆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虱岂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玖院,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年第岖,在試婚紗的時候發(fā)現(xiàn)自己被綠了难菌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡绍傲,死狀恐怖扔傅,靈堂內(nèi)的尸體忽然破棺而出耍共,到底是詐尸還是另有隱情烫饼,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布试读,位于F島的核電站杠纵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏钩骇。R本人自食惡果不足惜比藻,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倘屹。 院中可真熱鬧银亲,春花似錦、人聲如沸纽匙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烛缔。三九已至馏段,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間践瓷,已是汗流浹背院喜。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晕翠,地道東北人喷舀。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親元咙。 傳聞我的和親對象是個殘疾皇子梯影,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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