亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS App開發中UIViewController的loadView方法使用

2020-07-26 03:26:04
字體:
來源:轉載
供稿:網友

當你訪問一個ViewController的view屬性時,如果此時view的值是nil,那么,ViewController就會自動調用loadView這個方法。這個方法就會加載或者創建一個view對象,賦值給view屬性。
loadView默認做的事情是:如果此ViewController存在一個對應的nib文件,那么就加載這個nib。否則,就創建一個UIView對象。
如果你用Interface Builder來創建界面,那么不應該重載這個方法。

控制器的loadView方法以及view屬性
控制器有一個view屬性,我們經常在控制器中通過self.view來訪問。這個view是一個很有意思的東西。
首先要明白這個view到底是什么東西。
一個控制器成為window的根控制器的時候,當這個界面即將顯示,控制器的view會被加到window中用來顯示界面。正常情況下控制器自帶的view是"無色透明"的。
如果你在設置window的根控制器前創建一個Button直接加到window上,此時button出現在window上,但是在控制器的view的下面。此時點擊按鈕會發現按鈕并不會響應點擊。
這是因為控制器的view攔截了點擊事件,這說明它并非真的完全透明(因為如果完全透明,那么不會攔截點擊事件,可以設置viewController.view.alpha = 0來驗證,此時按鈕就可以響應點擊)。事實上view是一個backgroundColor為clearColor的視圖,clearColor是幾乎透明的顏色但是并非完全透明,也就是說當有類似點擊事件發生的時候,clearColor背景的view會攔截點擊事件,因為它并非完全透明。
所以可以說控制器的view是一個看不見摸得著的東西...
另外view是懶加載的,也就是說,只有真正使用到控制器的view的時候它才會被創建出來。它就是在控制器的-loadView方法中創建出來的。

復制代碼 代碼如下:

- (void)loadView
{
      // 類似這種實現
      // 可能還會進行更多的操作,比如判斷是否有指定storyboard,如果是就會加載storyboard中控制器的view等操作
    UIView *view = [[UIView alloc] init];
      view.backgroundColor = [UIColor clearColor];
      // ...
      _view = view;
}


前面說過,view是懶加載的,所以當使用self.view的時候:

復制代碼 代碼如下:

- (UIView *)view
{
      // 類似這種實現
    if (_view == nil) {
        [self loadView];
        [self viewDidLoad];
    }
    return _view;
}


當_view為nil的時候會調用loadView方法方法,此時系統默認會創建一個UIView對象并將其賦值給_view,此時_view有了值,接著調用viewDidLoad方法。
當再次訪問self.view的時候,因為_view已經有值,所以會直接返回_view。這也是為什么loadView以及viewDidLoad方法只會執行一次。
之前的文章提到過,在給window設置完根控制器,根控制器的view并不是馬上就被加到window上,也就是說此時view還未創建。在[self.window makeKeyAndVisible]之后界面即將顯示的時候,這時候需要用到view,此時就會調用view的getter方法,接著執行loadView,在接著執行viewDidLoad等一系列方法。
現在我們知道view是懶加載的,所以如果在[self.window makeKeyAndVisible]之前就用到控制器的view,那么它就會"提前”創建。

復制代碼 代碼如下:

NSLog(@"%@", viewController.view); // 此時用到view,就會創建view


現在我們知道控制器的view是通過loadView方法創建的了,所以我們可以覆寫這個方法來達到改變控制器的自帶view的目的:

復制代碼 代碼如下:

- (void)loadView
{
    JYView *view = [[JYView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    view.background = [UIColor blueColor];
    _view = view;
}


此時我們就改變了控制器原本自動創建的view,現在使用self.view則得到的是JYView的對象。


loadView使用中的一些注意點
永遠不要主動調用這個函數。view controller會在view的property被請求并且當前view值為nil時調用這個函數。如果你手動創建view,你應該重載這個函數。如果你用IB創建view并初始化view controller,那就意味著你使用initWithNibName:bundle:方法,這時,你不應該重載loadView函數。
這個方法的默認實現是這樣:先尋找有關可用的nib文件的信息,根據這個信息來加載nib文件,如果沒有有關nib文件的信息,默認實現會創建一個空白的UIView對象,然后讓這個對象成為controller的主view。
所以,重載這個函數時,你也應該這么做。并把子類的view賦給view屬性(property)(你create的view必須是唯一的實例,并且不被其他任何controller共享),而且你重載的這個函數不應該調用super。
如果你要進行進一步初始化你的views,你應該在viewDidLoad函數中去做。在iOS 3.0以及更高版本中,你應該重載viewDidUnload函數來釋放任何對view的引用或者它里面的內容(子view等等)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黑人欧美xxxx| 欧美精品18videos性欧| 国产精品狼人色视频一区| 在线视频欧美性高潮| 一区二区三区亚洲| 在线日韩av观看| 欧美性猛交xxxx免费看漫画| 久久精品国产91精品亚洲| 国产视频在线一区二区| 精品人伦一区二区三区蜜桃网站| 亚洲女在线观看| 日韩在线www| 亚洲精品按摩视频| 91性高湖久久久久久久久_久久99| 日韩在线免费观看视频| 国产精品99久久久久久人| 日韩在线免费视频观看| 久久精品国产综合| 久久久噜噜噜久久中文字免| 成人性生交大片免费看视频直播| 国产精品成人久久久久| 国产视频欧美视频| 久久资源免费视频| 中文字幕视频在线免费欧美日韩综合在线看| 欧美乱大交xxxxx另类电影| 国产精品精品久久久久久| 久色乳综合思思在线视频| 97精品久久久中文字幕免费| 日韩电影中文字幕| 日韩高清有码在线| 日韩中文字幕视频| 97人洗澡人人免费公开视频碰碰碰| 国产精品一区二区三区久久| 欧美日韩视频免费播放| 日韩中文视频免费在线观看| 欧美亚洲午夜视频在线观看| 欧美日韩国产综合视频在线观看中文| 国产精品视频自拍| 欧美在线视频免费观看| 欧美日产国产成人免费图片| 欧美成人sm免费视频| 亚洲国产另类久久精品| 午夜精品一区二区三区在线视| 亚洲免费福利视频| 欧美三级xxx| 亚洲成色www8888| 91免费视频网站| 91夜夜未满十八勿入爽爽影院| 中文字幕亚洲无线码在线一区| 日韩亚洲国产中文字幕| 亚洲乱亚洲乱妇无码| 欧美激情综合亚洲一二区| 国产一区二区在线免费视频| 国产精品91一区| 国外成人在线视频| 亚洲精品欧美一区二区三区| 久久九九全国免费精品观看| 日韩av在线网站| 日本免费在线精品| 中文字幕欧美专区| 国产福利精品视频| 88国产精品欧美一区二区三区| 欧美日韩国产成人高清视频| 91精品国产91久久久| 2021国产精品视频| 日韩电影中文字幕在线观看| 日韩二区三区在线| 91久久国产综合久久91精品网站| 欧美精品在线播放| 97久久久久久| 国产激情综合五月久久| 久久免费视频在线观看| 国产深夜精品福利| 日韩理论片久久| 欧美大片欧美激情性色a∨久久| 国产精品高清在线| 亚洲毛片在线免费观看| 久久在线观看视频| 欧美视频免费在线观看| 亚洲免费视频在线观看| 97高清免费视频| 日韩免费黄色av| 欧美成人免费播放| 亚洲第一精品夜夜躁人人爽| 亚洲欧美在线看| 日韩在线观看免费av| 久久久999国产精品| 日韩精品视频免费在线观看| 亚洲欧美www| 最新日韩中文字幕| 欧美日韩国产第一页| 一本一本久久a久久精品牛牛影视| 91香蕉国产在线观看| 亚洲综合在线中文字幕| 欧美性理论片在线观看片免费| 精品五月天久久| 尤物yw午夜国产精品视频明星| 91禁国产网站| 国产精品成人免费视频| 色播久久人人爽人人爽人人片视av| 日韩在线视频网站| 国内精品一区二区三区四区| 国产亚洲欧美日韩美女| 午夜精品一区二区三区在线播放| 精品日韩美女的视频高清| 韩国一区二区电影| 欧美成人午夜激情| 日韩电影中文 亚洲精品乱码| 欧美日韩国产一区二区三区| 97人人爽人人喊人人模波多| 亚洲美女自拍视频| 亚洲精品小视频在线观看| 欧美超级免费视 在线| 精品福利免费观看| 97香蕉超级碰碰久久免费软件| 亚洲国产高清高潮精品美女| 国产第一区电影| 亚洲欧美国产一本综合首页| 日韩中文av在线| 91亚洲精品一区二区| 欧美一级片久久久久久久| 欧美成人午夜剧场免费观看| 久久亚洲影音av资源网| 欧美裸体xxxx极品少妇| 色婷婷av一区二区三区久久| 中文字幕av一区二区三区谷原希美| 成人性教育视频在线观看| 午夜欧美大片免费观看| 欧洲午夜精品久久久| 国产精品久久久999| 中文字幕在线观看日韩| 日韩精品中文字| 国产999精品视频| 成人h片在线播放免费网站| 国内偷自视频区视频综合| 91大神在线播放精品| 久久久久久久一| 欧洲一区二区视频| 性欧美视频videos6一9| 亚洲欧美中文日韩v在线观看| 5566成人精品视频免费| 日韩h在线观看| 1769国内精品视频在线播放| 亚洲精品视频在线观看视频| 国产一区二区日韩精品欧美精品| 国产精品高清免费在线观看| 国产精品久久久久久久久男| 精品久久在线播放| 91国内揄拍国内精品对白| 色爱精品视频一区| 亚洲一区美女视频在线观看免费| 国产精品久久久久久中文字| 久久久亚洲欧洲日产国码aⅴ| 欧美午夜女人视频在线| 国产成人一区二区| 国产一区二区久久精品| 国产精品国产三级国产专播精品人| 91地址最新发布| 欧洲日本亚洲国产区| 欧美乱妇40p| 福利视频导航一区| 亚洲无亚洲人成网站77777| 色噜噜亚洲精品中文字幕| 最近中文字幕mv在线一区二区三区四区|