国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 詳解iOS App開發中UIViewController的loadView方法使用

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

2021-01-10 14:52ForeverYoung21 IOS

這篇文章主要介紹了詳解iOS App開發中UIViewController的loadView方法使用,講解了訪問view屬性時loadView方法的調用及使用loadView時的一些注意點,需要的朋友可以參考下

當你訪問一個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等等)。

延伸 · 閱讀

精彩推薦
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美精品在线一区 | 另类久久 | 国产在线免费 | www.青青草原 | 激情一区二区三区 | 刺激网 | 天堂视频在线 | 手机在线观看 | 国产精品免费自拍 | 亚洲三级在线观看 | 亚洲视频精品一区 | 一级录像免费录像在线观看 | 国产片在线播放 | 老色批影院 | 伊人久久国产 | 玖玖操| 自拍偷拍一区二区三区 | 亚洲免费观看视频 | 亚洲国产精品久久久久 | 精品国产乱码一区二区三区 | 亚洲一区二区在线 | 国产一级成人 | 日韩精品一区二区三区中文字幕 | 精品一区久久 | 日韩在线免费播放 | 三级黄色片在线观看 | 欧美a在线看 | 欧美精品在线视频 | 欧美日韩第一页 | 亚洲免费美女视频 | 青青草精品 | 九色在线| 羞羞网站免费观看 | 亚洲男人天堂网 | 视频三区 | 亚洲高清精品视频 | 99精品久久 | 国产一区二区三区在线 | 999久久久国产999久久久 | 欧美成人高清视频 | 亚洲视频免费 |