2009-09-22 53 views
6

我的應用程序中有一個UITableViewController,它直接添加到視圖層次結構中。在視圖出現後,我想滾動到特定的單元格。我的解決方案是調用-[viewDidAppear]中的滾動代碼。手動調用viewDidAppear的正確時間?

根據蘋果的文檔我必須手動調用該方法:

如果屬於視圖控制器視圖直接添加到一個視圖層次結構,視圖控制器將不會收到此消息。如果向視圖層次結構中插入或添加視圖,並且它具有視圖控制器,則應直接將關聯的視圖控制器發送此消息。

問題是:什麼時候手動調用它?

從父視圖控制器的-[viewDidAppear]導致崩潰調用它,當我嘗試做滾動因爲很明顯,表視圖實際上沒有尚未出現,因此認爲它有沒有部分滾動到。

回答

1

調用它從父控制器的-viewDidAppear通常是你最好的選擇。

如果這會導致問題,如果子視圖控制器尚未完全初始化,您可能會遇到另一個問題。確保你的孩子視圖控制器完全是「準備行動」 -viewWillAppear被調用後(你也可以從手動調用父-viewWillAppear

1

在 - [viewDidAppear]上實現代碼如下,確實叫從父視圖控制器的 - [viewDidAppear]中,您可以調用[tableView reloadData],這樣可以確保tableView已加載並準備就緒。

0

這是如何我手動調用viewWillAppearviewDidAppearviewWillDisappearviewDidDisappearhere

和視圖控制器之一予加載這種方式,具有以下viewWillAppear:(注意,這是因爲在點viewWillAppearviewDidAppear被稱爲,您的看法是由用戶可查看)

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [wordListTable reloadData]; 
    [wordListTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
} 
-1

當您調用它時會發生什麼樣的崩潰錯誤?有可能你沒有正確保留你的tableview。

7

如果您使用視圖控制器遏制,請不要直接撥打viewWillAppear:。請使用– beginAppearanceTransition:animated:– endAppearanceTransition

如果您正在實現自定義容器控制器,請使用此方法告訴孩子其視圖即將出現或消失。不要直接調用viewWillAppear :, viewWillDisappear:,viewDidAppear :,或viewDidDisappear:。

調用addSubView將自動觸發viewWillAppear:viewDidAppear:如果視圖的的viewController是兒童視圖控制器,因此主叫viewWillAppear:直接將觸發視圖將外觀的方法兩次。使用beginAppearanceTransition:動畫:and - endAppearanceTransition`將抑制自動行爲,因此您只能調用一次。