addChildViewController與viewWillAppear、viewDidAppear關係說明

來源:互聯網
上載者:User

標籤:

最近項目中使用addChildViewController時遇到了很詭異的問題,我們的用法如下,在ParentViewController的viewWillAppear中請求資料,請求資料成功之後使用如下代碼添加子視圖控制器:

[self.view addSubview:childViewController.view];[self addChildViewController:childViewController];

這時會發生一個奇怪的現象,即childViewController的viewWillAppear方法會調用一次,viewDidAppear方法會連續調用兩次。當我們把添加子視圖控制器的代碼改為以下代碼時:

[self addChildViewController:childViewController];[self.view addSubview:childViewController.view];

這時也會發生一個奇怪的現象,即childViewController的viewWillAppear方法不會調用,viewDidAppear方法會調用一次。

經過一番研究之後,終於找到了原因。當childViewController沒有被加到任何父視圖控制器時,如果把childViewController的view加到別的視圖上,viewWillAppear和viewDidAppear會正常調用。但是當childViewController被加到一個父視圖控制器上後,viewWillAppear和viewDidAppear就會與父視圖控制器的viewWillAppear和viewDidAppear事件同步。

所以在以上代碼中第一種情況下,先調用addSubView,viewWillAppear和viewDidAppear會各調用一次,再addChildViewController,與父視圖控制器的事件同步,即當父視圖控制器的viewDidAppear調用時,childViewController的viewDidAppear方法會再調用一次。所以viewDidAppear方法被調用了兩次。

而在第二種情況下,先調用addChildViewController,childViewController的事件與父視圖控制器同步,當父視圖控制器的viewDidAppear調用時,childViewController的viewDidAppear方法會調用一次,再調用addSubView也不會觸發viewWillAppear和viewDidAppear。

因此,解決以上問題的辦法很簡單,將請求資料的代碼放到viewDidAppear中即可。


如果大家覺得對自己有協助的話,還希望能幫頂一下,謝謝:)
個人部落格:http://blog.csdn.net/zhaoxy2850
本文地址:http://blog.csdn.net/zhaoxy_thu/article/details/50826190
轉載請註明出處,謝謝!

addChildViewController與viewWillAppear、viewDidAppear關係說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.