最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解iOS App開發(fā)中UIViewController的loadView方法使用

 更新時間:2016年03月15日 09:26:03   作者:ForeverYoung21  
這篇文章主要介紹了詳解iOS App開發(fā)中UIViewController的loadView方法使用,講解了訪問view屬性時loadView方法的調(diào)用及使用loadView時的一些注意點,需要的朋友可以參考下

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

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

復(fù)制代碼 代碼如下:

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


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

復(fù)制代碼 代碼如下:

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


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

復(fù)制代碼 代碼如下:

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


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

復(fù)制代碼 代碼如下:

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


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


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

相關(guān)文章

  • Objective-C中NSArray的基本用法示例

    Objective-C中NSArray的基本用法示例

    這篇文章主要介紹了Objective-C中NSArray的基本用法示例,包括基本的排序等方法的介紹,需要的朋友可以參考下
    2015-09-09
  • iOS第三方框架二維碼生成與掃描

    iOS第三方框架二維碼生成與掃描

    這篇文章主要為大家詳細介紹了iOS第三方框架二維碼生成與掃描,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • iOS實現(xiàn)簡單計算器小功能

    iOS實現(xiàn)簡單計算器小功能

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解iOS - ASIHTTPRequest 網(wǎng)絡(luò)請求

    詳解iOS - ASIHTTPRequest 網(wǎng)絡(luò)請求

    本篇文章主要介紹了iOS - ASIHTTPRequest 網(wǎng)絡(luò)請求 ,詳細的介紹了 ASIHTTPRequest的使用,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • xcode8提交ipa失敗無法構(gòu)建版本問題的解決方案

    xcode8提交ipa失敗無法構(gòu)建版本問題的解決方案

    xcode升級到xcode8后發(fā)現(xiàn)構(gòu)建不了新的版本。怎么解決呢?下面小編給大家?guī)砹藊code8提交ipa失敗無法構(gòu)建版本問題的解決方案,非常不錯,一起看看吧
    2016-10-10
  • iOS使用pageViewController實現(xiàn)多視圖滑動切換

    iOS使用pageViewController實現(xiàn)多視圖滑動切換

    這篇文章主要為大家詳細介紹了iOS使用pageViewController實現(xiàn)多視圖滑動切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • iOS多媒體音頻(下)-錄音及其播放的實例

    iOS多媒體音頻(下)-錄音及其播放的實例

    本篇文章主要介紹了iOS多媒體音頻(下)-錄音及其播放的實例,非常具有實用價值,需要的朋友可以參考下。
    2016-12-12
  • iOS WebView中使用webp格式圖片的方法

    iOS WebView中使用webp格式圖片的方法

    由于最近項目需求,需要將項目中圖片的加載做到同時兼容WebP格式,所以下面這篇文章主要給大家介紹了關(guān)于在iOS WebView中使用webp格式圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • 詳解iOS11、iPhone X、Xcode9 適配指南

    詳解iOS11、iPhone X、Xcode9 適配指南

    這篇文章主要介紹了詳解iOS11、iPhone X、Xcode9 適配指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • iOS輸入框的字數(shù)統(tǒng)計/最大長度限制詳解

    iOS輸入框的字數(shù)統(tǒng)計/最大長度限制詳解

    在開發(fā)中經(jīng)常會遇到鍵盤輸入的字符長度的限制,下面這篇文章主要給大家介紹了關(guān)于iOS輸入框的字數(shù)統(tǒng)計/最大長度限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06

最新評論

宁强县| 屏东市| 昌都县| 巴彦县| 阿鲁科尔沁旗| 灵宝市| 乐昌市| 莱西市| 朝阳县| 突泉县| 温宿县| 岳阳县| 呼伦贝尔市| 吉安县| 漳州市| 盘锦市| 荥经县| 大渡口区| 高邮市| 江达县| 饶河县| 美姑县| 德兴市| 措美县| 金坛市| 稻城县| 固安县| 兴国县| 贵阳市| 银川市| 江阴市| 桂阳县| 昌吉市| 吕梁市| 望江县| 宾阳县| 城固县| 宜兰市| 泗洪县| 弋阳县| 竹溪县|