ios開發之xib的詳細加載過程

相信來看這篇的文章的朋友們都是知道xib文件,並且用過xib文件的吧,所以在這裏我就直接進入正題直接說說xib的詳情加載過程把。關於xib的加載過程主要是這個函數

  [[NSBundle mainBundle] loadNibNamed:(NSString *) owner:(id) options:(NSDictionary *)];

那我就來說說這個函數內部, 蘋果官方解析的相信過程吧

爲了方便解釋, 我還是附上圖片吧


- (NSArray *)loadNibName(NSString *)name owner:(id)owner options:(NSDictionary *)options

{

// 首先會相信解析name.xib下的所有Object對象 (xib其實是xml 文件)

創建name.xib下的Object所以對象

這裏我就已第一個對象View來模擬xib的解析

解析View的各個屬性來創建第一個“我是按鈕”所在的這個UIView

解析過程如下:

// 創建一個View

UIView *view = [[UIView alloc] init];

// 設置view的各個屬性

view.backgroundColor = [UIColor blueColor];

......

// 創建一個按鈕

UIButton *button = [[UIButton alloc] init];

// 設置按鈕各個屬性

...

// 添加按鈕到view上

[view addSubview: button];



// 創建其他的兩個控件並解析控件設置其屬性

}

注意: 上面那個函數返回的是一個數組, 所以需要用到那個對象注意其下標

通過上面那個函數只是簡單的加載xib視圖, 要想對裏面的控件進行拖線, 或者監聽 就要設置xib裏面的File's Owner

現在我先來說一下設置File's Owner前後的差別吧, 爲此, 我先創建一個UIView的類來供“我是按鈕”所在的這個UIView連線使用, 並且給這個類聲明並實現了對象方法 - (IBAtion)buttonCilck; 如圖








現在設置xib的File's Owner的Custom Class的實力對象爲我們創建的MyView, 並且通過連線監聽按鈕點擊


如下圖代表連線成功 , 就可以監聽按鈕點擊事件了



然後通過在ViewController.m文件的- (void)viewDidLoad 方法寫 代碼加載xib



現在我來演示一個初學者常見的錯誤

注意: 上圖箭頭所指的owner 並不是我們xib裏面的File's Owner, 當前爲nil; 現在運行程序, 程序可以正常運行, 但是點擊“我的按鈕”, 程序就立馬崩潰了 

因爲當前按鈕已經有點擊事件了, 點擊按鈕時, 會調用owner的buttonClick方法, 當前owner爲nil 所以會出錯

因爲owner的類型爲(id),所以這裏我創建一個Dog類來監聽點擊, 並讓Dog類聲明和實現- (IBAtion)buttonClick;方法

, 然後通過設置File's Owner的Custom Class的class爲 Dog使我們的狗可以監聽按鈕點擊




然後創建一條狗dog 並令owmer的參數爲dog



然後運行程序(command + R)

運行後,點擊按鈕還是會崩潰,這次顯示的原因和上次一樣,並不是我們這個方法錯了, 而是我們創建的這條是局部變量,這個函數運行完就銷燬了, 所以我們要給控制器設置一個dog屬性,來解決這個問題



現在運行程序就不會有問題了,點擊一下按鈕 狗就會監聽到 輸出 汪汪汪.....



現在我來總結一下File's Owner的使用步驟

1> 在xib中設置File's Owner的class 屬性(目的是爲了在xib中能找到owner的方法)

2> 建立File's Owner跟控件之間的聯繫(拖線)

3> 利用代碼加載xib, 傳遞owner的參數(類型一定要與File's Owner的class 一致

如果還有不清除的可以留言,評論, 如果我有空會盡量給大家解答的!

如果需要源代碼,可在如下百度雲鏈接下載:

鏈接: http://pan.baidu.com/s/1sj3LwxJ 密碼: 9g6w


好了,大概也就這些了,謝謝你們的閱讀! 你們的評論是對我最大的鼓勵! 謝謝


發佈了28 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章