IOS 載入控制器的幾種方法順序

2021-08-18 00:17:48 字數 2802 閱讀 3706

**建立的viewcontroller:

viewcontrollerwith *vc = [[viewcontrollerwith alloc]init];
在這個載入過程中 相關方法呼叫順序是:

init

initwithnibname:bundle:

loadview

viewdidload

當command+n建立viewcontroller的時候勾選了also create xib file ,系統就會幫我們建立與viewcontroller同名的xib檔案

對於這種控制器,常用的建立方式是:

viewcontrollerwithxib *vc = [[viewcontrollerwithxib alloc]initwithnibname:@"viewcontrollerwithxib" bundle:nil];
在這個載入過程中 相關方法呼叫順序是:

initwithnibname:bundle:

loadview

viewdidload

當然, 你也可以以下這種方式建立帶有xib的viewcontroller

viewcontrollerwithxib *vc = [[viewcontrollerwithxib alloc]init];
這樣也能載入出你在xib裡面建立的view

前提是你的控制器不能重寫loadview方法

因為用這種方式建立 系統會呼叫loadview幫你尋找和類同名的xib檔案載入

你若是重寫了loadview,那麼控制器就是漆黑一片

這種方式和**建立方式時,函式呼叫順序一致

在storyboard中構建好自己的控制器用以下**初始化:

uistoryboard *storyboard = [uistoryboard storyboardwithname:@"main" bundle:nil];//這裡的bundle 寫nil也可以代表是mainbundle

myviewcontroller *vc = [self.storyboard instantiateviewcontrollerwithidentifier:@"myviewcontroller"];

在這個載入過程中 相關方法呼叫順序是:

initwithcoder:

awakefromnib

loadview(這個方法結束時 控制器的view的子控制項才建立)

viewdidload

view載入的純**的方式:

myview *view = [[myview alloc]init];
view加贊完畢的時候

在這個載入過程中 相關方法呼叫順序是:

init

initwithframe:

是init呼叫了initwithframe:

xib載入方式:

uiview *view = [[[nsbundle mainbundle] loadnibnamed:@"myview" owner:self options:nil]lastobject];
解析乙個檔案的時候呼叫(只是建立了view)

在這個載入過程中 相關方法呼叫順序是:

initwithcoder:(這個時候子控制項沒有被建立)

awakefromnib(這個時候子控制項建立完畢, 一般會在這裡進一步對view進行初始化)

總結:

1.initwithnibname:bundle: (載入帶有xib控制器)

2.loadview (控制器的view為空的時候呼叫,幫控制器載入view)

3.initwithcoder: (是當從nib檔案中載入物件的時候會呼叫)

4.awakefromnib (當.nib檔案被載入的時候,會傳送乙個awakefromnib的訊息到.nib檔案中的每個物件)

5.initwithframe: (**建立view時呼叫,是懶載入,只有到需要顯示時,子控制項才不是 nil)

補充:

[viewcontroller initwithnibname:bundle]

返回的是控制器

;載入自定義xib注意設定:     

1.  

在空的xib中新增的是view ; (關鍵)  

3. 設定:在view的show the connections inspector 的 outlets 中將view屬性拖拽到新增的view;(否則載入會奔潰) 

4. 屬於延時載入;         

[[nsbundle

mainbundle] loadnibnamed:

@"myview"

owner:

self

options:

nil]

返回的是繼承nsobject的陣列;

載入自定義xib注意設定: 

1. 在自定義的  empty xib  中 新增什麼型別 本方法就會返回什麼型別。(多用於自定義view)

3. 設定:在view的show the connections inspector 的 outlets 中將view屬性拖拽到新增的view;(否則載入會奔潰) 

// 起到四兩撥千斤的效果

方法在檢視跳轉的時候被觸發 , 注意條件:

只適用於storyboard跳轉

- (void)prepareforsegue:(uistoryboardsegue *)segue sender:(id)sender

示例:參口示例

iOS 控制器View載入順序詳細版

1 一般情況下呼叫 init方法或者呼叫initwithnibname方法例項化uiviewcontroller,不管呼叫哪個方法都為呼叫initwithnibname 方法定義如下 id initwithnibname nsstring nibnameornil bundle nsbundle n...

iOS 懶載入子控制器的View

笨方法 新增子控制器的view nsuinteger count self.childviewcontrollers.count cgfloat scrollvieww scrollview.width cgfloat scrollviewh scrollview.height for nsuint...

ios中建立控制器的幾種方式

1 通過storyboard建立 1 先載入storyboard檔案 uistoryboard storyboard uistoryboard storyboardwithname test bundle nil 2 初始化storyboard中的控制器 初始化 初始控制器 hlviewcontro...