2010-05-19 66 views
2

推時使用的UINavigationController到視圖一個視圖控制器:推視圖控制器使用的UINavigationController有時調用viewDidAppear:和viewWillAppear中:

  1. 什麼是必要的它觸發 viewDidAppear:和viewWillAppear中:?
  2. 是什麼讓它無法觸發viewDidAppear:和viewWillAppear:?

我們很難依靠這些方法被觸發與否。

+0

你會期望這是一樣簡單1:視圖出現2:視圖不出現:) – willcodejavaforfood 2010-05-19 15:44:50

+0

是的,我也會。 :)但我的眼睛和控制檯不會撒謊。 – hfossli 2010-05-21 09:06:48

回答

6

UINavigationController直接在調用pushViewController時被推入的控制器上調用這些方法:animated:類似地,UITabBarController在切換選項卡時直接調用這些方法,而UIViewController在使用presentModalViewController時調用它們:animated :.當視圖控制器的視圖添加到窗口時,它們也會被調用。我從來沒有見過這些方法在這些特定的情況下無法被調用。

現在請記住,這些方法只會在控制器被推送或呈現在這些特定上下文中調用。例如,如果將視圖控制器的視圖添加爲除UIWindow以外的某個視圖的子視圖,則不會調用這些方法。 Apple的文檔指出,視圖控制器僅用於全屏視圖,通常使用上述方法之一來呈現視圖控制器。可以忽略Apple的建議並將視圖控制器與其他視圖控制器的子視圖相關聯,但必須手動將從視圖控制器的viewWill/DidAppear/Disappear調用委派給嵌套控制器。

+0

我在我的tabbar控制器中有3個選項卡。每個都有一個UITableView作爲self.view。每個視圖控制器都加載了initWithNibName。我發現viewDidAppear根本沒有被調用。即使您點擊了標籤欄項目。即使我點擊表格單元格切換視圖。但是當我在一個視圖中加載一個模式視圖控制器時,在那之後viewdidappear的行爲就像我們預期的那樣。似乎第一個標籤欄視圖控制器必須卸載一次,然後開始工作。我無法找到任何其他解決方法。 – karim 2010-09-28 11:11:06

0

檢查您是否已經有了函數名稱完全正確,例如:

- (void)viewWillAppear:(BOOL)animated 

例如,如果你忘記申報動畫參數,你的函數將不會被調用。

這聽起來很明顯,但我犯了這個錯誤,因爲原來的文章沒有代碼示例,我想我會分享!

相關問題