2010-03-10 109 views
3

我有一對夫婦的UITableViewController類的,我只注意到這些方法都不會被調用:viewWillAppear沒有在UITableViewController中調用?

-(void)viewWillAppear:(BOOL)animated; 
-(void)viewDidAppear:(BOOL)animated; 

http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0閱讀,我將不得不推視圖控制器時要調用這些方法我自己,但很奇怪,因爲它適用於除了UITableViewController之外的任何東西。

也使得它有點問題的時候,我需要有在推的UITableViewController的UIViewController中取消選擇一個UITableViewCell。

+0

有什麼問題嗎? – pheelicks 2010-03-10 15:27:33

+0

對不起。 爲什麼UITableViewController默認不調用這些方法? – runmad 2010-03-10 16:20:00

回答

4

沒有人解決,是因爲原來的職位是正確的 - 簡單地使用的UITableViewController,推動該控制器到navController的表視圖儘管它應該不會觸發這些方法。我有一系列UITableViewControllers和表視圖被推送和彈出來顯示分層數據 - 沒有什麼奇怪的,但「viewWill/Did/Appear/Disappear」方法從不會被調用。只調用viewDidLoad和viewDidUnload。

在我們的設置中都必須存在接線問題,但只需將視圖推入navigationController應該是所有必需的(?) - 很難相信這可能已被忽視作爲一個長期的基本錯誤。

0

默認情況下調用這兩個方法來通知更改。 UITableViewController是UIViewController的子類,所以會有相同的行爲。您可以在View Controller Programming Guide中看到更多

viewWillAppear:和viewDidAppear:方法爲子類提供了執行與視圖外觀相關的任何其他操作的機會。

你怎麼知道這些方法是不是叫什麼名字?你可以提供更多的代碼,或者至少你用NSLog()來測試它們是否有一些消息被打印出來。

+0

我設置了斷點和NSLogs,沒有任何反應。 – runmad 2010-03-10 16:46:37

+0

你能否提供一些這兩種方法的實施代碼,以便我可以看到會發生什麼... – 2010-03-10 16:50:25

+0

很難在評論欄中。基本上我有一個UINavigationController,並在navigationBar中,我有一個UISegmentedControl。切換段,用戶在兩個視圖(配置文件和訂單)之間切換。點擊一個訂單應該把視圖推到另一個視圖(在同一個UINavigationController裏面),它具有訂單詳細信息。基本上,它與App Store應用的「精選」部分相同。你有3段,每段都有自己的UITableView,可以推入一個新的視圖。我有很多問題想要做到這一點。 – runmad 2010-03-10 17:03:30

9

我在文檔中找不到它,但我認爲這可能是因爲您正在使用UINavigationController。

如何設置UINavigationController的委託屬性,然後實現UINavigationControllerDelegate?它提供了兩種可選方法:

– navigationController:willShowViewController:animated: 
– navigationController:didShowViewController:animated: 

例如,navigationController:willShowViewController:動畫:可能是這個樣子:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if ([viewController isKindOfClass:[UITableViewController class]]) { 
    [viewController viewWillAppear:animated]; 
    } 
} 

無論如何,這會得到你想要的行爲,而無需破解通話以查看威脅出現:遍佈您的項目。

0

我看到了同樣的問題。我有一個來自IB的簡單UIView,我用一個擴展UITableViewController的類來做一個addSubview。

我可以在應用程序中看到TableViewController的視圖沒有問題,但viewWillAppear函數在這種情況下從來沒有被調用過。

+0

我已經瞭解到,這些委託方法僅針對UIViewController類而被調用。 – runmad 2010-10-29 14:10:11

0

那麼,從這個問題鏈接的討論有正確的答案。 UINavigationController需要接收「viewWillAppear」消息才能將這些消息發送到您推送到它的視圖控制器。

如此諷刺的是,如果你不做Apple推薦的功能,並且你的視圖控制器的子類爲UINavController,那麼一切都很好。然而,如果你只是在你的視圖控制器內部創建一個UINavController,那麼你需要實現「viewWillAppear」,「viewDidAppear」等,並將這些轉發給你的導航控制器。

請注意,如果您使用Three20,這尤其重要,因爲它的視圖控制器層次結構期望收到「viewWillAppear」消息。如果沒有,你可以結束TTTableViews不繪製。

0

如果您使用UITabViewController,則會發生同樣的情況。你需要通過實施無論是UITabViewControllerDelegate或UINavigationControllerDelegate回調

相關問題