主要還是和- (void)loadView方法相關荸百,所以下面筆者主要來說一下它的注意點
-
系統(tǒng)是通知loadView方法創(chuàng)建控制器的view.
- 1.判斷當前的控制器是否從StoryBoard加載的.如果是,從StoryBoad當中創(chuàng)建View(下面通過代碼補充思想:)
- 2.如果不是,還會判斷當前控制器,是否有xib進行描述.如果有,就會從Xib里面創(chuàng)建View
- 3.如果也不是xib來描述的,那么它就會給創(chuàng)建一個空的UIView.該UIView本身不是透明的
- 4.創(chuàng)建空白的View顏色是透明的,即clearColor
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 創(chuàng)建窗口 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 設置根控制器 UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil]; //加載StoryBoard當中箭頭指向的控制器. UIViewController *VC = [storyBoard instantiateInitialViewController];
// ViewController *VC = [[ViewController alloc] init];
self.window.rootViewController = VC;
// 顯示窗口
[self.window makeKeyAndVisible];
return YES;
}
```
Main.storyboard圖:
ViewController.xib圖:
ViewController.storyboard圖:
筆者在storyboardWithName傳的參數(shù)不是Main,如果是Main的話,運行效果圖為:
傳的參數(shù)是ViewController,運行效果圖為:
如果代碼是上面注釋的部分:ViewController *VC = [[ViewController alloc] init]; 那么效果圖為:
/**
* 如果不實現(xiàn)loadView方法滨攻,控制器默認有一個loadView方法够话,
默認系統(tǒng)怎么加載控制器的view呢蓝翰,先去storyboard里面找,沒有找到
再去與控制器名稱相同的xib里面找,沒有找到更鲁,在去名稱相同去掉Controller的xib
里面找霎箍,還沒有找到,程序員也沒有重寫loadView方法澡为,那么系統(tǒng)默認會
創(chuàng)建一個view,顏色是clearColor,如果實現(xiàn)了loadView方法的話景埃,上面的都不會做
*/
//系統(tǒng)是通知loadView方法創(chuàng)建控制器的view.
//1.判斷當前的控制器是否從StoryBoard加載的.如果是,從StoryBoad當中創(chuàng)建View.
//2.如果不是,還會判斷當前控制器,是否有xib進行描述.如果有,就會從Xib里面創(chuàng)建View
//3.如果也不是xib來描述的,那么它就會給創(chuàng)建一個空的UIView.
//在開發(fā)當中一但重寫了loadView,需要自己創(chuàng)建View.
//一般用在什么地方
//1.當控制器的view一進來就是一個圖片時
//2.當控制器一進來就去加載一個網(wǎng)頁時.
- (void)loadView {
UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default"]];
imageV.frame = [UIScreen mainScreen].bounds;
//如果一個控件它的父控件不能夠接收事件,那么它里面的子控件都不能夠接收事件.UIImageView對象的屬性userInteractionEnabled默認就是NO,所以要格外注意
imageV.userInteractionEnabled = YES;
self.view = imageV;
}
// loadView是當?shù)谝淮问褂每刂破鱒iew的調(diào)用.調(diào)用控制器view的get方法媒至,里面會繼續(xù)調(diào)用loadView方法,所以就造成了死循環(huán)谷徙,所以在給self.view賦值之前拒啰,絕對不能出現(xiàn)self.view的字眼,因為會調(diào)用view的get方法完慧,那樣會造成死循環(huán)
//-(UIView *)view {
// if (_view == nil) {
// [self loadView];
// }
// return _view;
//}
重點總結: 和筆者前面總結的不沖突谋旦,注意,如果我們在storyboard里面拖了一個新的控制器屈尼,那么我們可能需要去描述它通過新建一個對象生成.h和.m文件册着,然后我們在選中storyboard里面剛剛拖的新的控制器,給它賦值上剛剛新建的類名脾歧,讓他們兩個進行關聯(lián)甲捏,那么重點來了,它不會走上面總結的路線鞭执,什么檢查storyboard,xib,創(chuàng)建默認的view司顿,都不會走,這是一個全新的概念兄纺,記住大溜,只要是往storyboard里面拖的控制器,那么它里面的view是會自動加載的估脆,不需要你去關心钦奋,記住,over