2011-11-19 11 views
3

當我從一個視圖控制器(我們稱之爲MasterViewController)轉換到另一個視圖(稱爲DetailViewController)時,每個控制器上的viewWillDisappear:,viewWillAppear:等方法調用的順序是什麼?當從一個視圖控制器轉換到另一個視圖控制器時,按什麼順序調用視圖方法?

我懷疑我的主視圖消失時調用的一些清理代碼干擾了我的詳細視圖中的初始化代碼。我查看了Apple的文檔,但找不到涉及多個視圖控制器的任何信息。

回答

6

我創建了一個簡單的基於UINavigationController的項目,並增加了一些NSLog語句來找出他們被調用的順序。

  1. prepareForSegue:
  2. 詳細viewDidLoad
  3. viewWillDisappear:
  4. 詳細viewWillAppear:
  5. 顯示新視圖(帶或不帶動畫)
  6. 萬事達viewDidDisappear:(動畫完成後)
  7. 詳細viewDidAppear:

然而,使用UITabViewController視圖之間切換時,順序是不同的:

  1. SecondTab viewDidLoad
  2. SecondTab viewWillAppear:
  3. FirstTab viewWillDisappear:
  4. 顯示新視圖。
  5. FirstTab viewDidDisappear:
  6. SecondTab viewDidAppear:

這樣看來,你不能總是在這些事件中相同的順序存在的數 - 它可以根據您所之間轉換的視圖控制器的性質而變化。

有沒有我在這裏錯過的重要觀點?

+0

萬一視圖控制器正在被解僱並且有一個完成處理程序,它在viewDidDisappear之後被調用。更多的信息在這裏https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss 在討論部分:) – hariszaman

相關問題