創(chuàng)建一個(gè)ViewController類的時(shí)候,有個(gè)勾選項(xiàng),可以同時(shí)創(chuàng)建一個(gè)同名的xib文件。當(dāng)viewController調(diào)用view的getter方法時(shí),若view為nil,則會(huì)調(diào)用loadView方法創(chuàng)建view。此時(shí),如果有對(duì)應(yīng)xib文件,則會(huì)通過(guò)xib文件創(chuàng)建view,如果沒(méi)有xib文件,loadView方法會(huì)創(chuàng)建一個(gè)默認(rèn)的view。
ViewController的xib中,默認(rèn)只有一個(gè)view,關(guān)聯(lián)controller對(duì)象中的view屬性。本節(jié)介紹在ViewController的xib中添加更多的view,并且關(guān)聯(lián)到controller對(duì)象。
demo地址:https://github.com/huibaoer/Demo_xib
1.首先創(chuàng)建工程,添加RootViewController,注意添加的時(shí)候?qū)ib文件一并加上。
2.打開(kāi)RootViewController的xib文件,看到默認(rèn)只有一個(gè)view。選中File’s Owner,右側(cè)選擇第三個(gè)選項(xiàng)卡,確認(rèn)class為RootViewController,說(shuō)明當(dāng)前的xib文件是屬于RootViewController所有。選擇最后一個(gè)選項(xiàng)卡(連接選項(xiàng)卡),確認(rèn)RootViewController的view屬性已經(jīng)連接到當(dāng)前xib文件中的view,鼠標(biāo)指向該連接,view會(huì)閃動(dòng)。再重新選中xib中的view,嘗試修改view的背景顏色,運(yùn)行工程,確認(rèn)xib中的view就是顯示的頁(yè)面。
3.xib中添加新的view。拖拽一個(gè)view控件到xib中,不要放在之前的默認(rèn)view上,確保新添加了一個(gè)view到xib中。選中新添加的view,在右側(cè)選中其屬性設(shè)置欄,Simulated Metrics下設(shè)置Size為Freeform,Status Bar為None,調(diào)整大小為320*100。
4.編輯新添加的view,在view上添加一個(gè)imageView作為頭像,一個(gè)label作為標(biāo)題,再一個(gè)label作為描述,修改一下背景顏色,方便識(shí)別。
5.將編輯好的view關(guān)聯(lián)到RootViewController。選擇Xcode右上側(cè)的一個(gè)兩個(gè)圈的按鈕,Xcode編輯區(qū)被分成兩部分,左側(cè)為xib,右側(cè)為xib對(duì)應(yīng)的File’s Owner(RootViewController),偶爾關(guān)聯(lián)的不正確可自行在右側(cè)選擇正確的文件。選中新添加的視圖,點(diǎn)擊右鍵,會(huì)有該視圖支持的操作,因?yàn)槭莢iew,不是button,所以只有outlets(引用輸出口),選中New Referencing Outlet,拖拽到右側(cè)RootViewController上,創(chuàng)建一個(gè)outlet(引用輸出口,也就是一個(gè)屬性),不需要外部操作的盡量拖拽到延展中,保持良好的封裝。將其他需要outlet的控件以同樣的方法拖拽好。
6.在RootViewController的viewDidLoad方法中,將新添加的視圖貼在view上,代碼如下:
// add headerView
[self.view addSubview:self.headerView];
self.headerTitle.text = @"test title";
self.headerDescription.text = @"test description";
這里需要注意的一點(diǎn),因?yàn)閤ib文件是RootViewController自帶的xib,在其創(chuàng)建view的過(guò)程中會(huì)自動(dòng)加載xib,所以不需要我們手動(dòng)加載xib文件,到viewDidLoad方法中,view已經(jīng)加載完畢,所以xib也必定加載完畢,所以我們關(guān)聯(lián)的屬性(headerView等)也必定已經(jīng)加載好,所以可以直接貼到self.view上。
7.運(yùn)行工程,查看效果如下: