0

我有一個從UITableViewDelegate和UIScrollViewDelegate繼承的UIViewController(名爲VC)。之前的UIViewController像這樣加載VC:如何滾動到tableview行?

[self.view addSubview:VC.view]; 

這意味着viewWillAppear不會觸發。我可以在上述行之後添加方法:

[VC viewWillAppear]; 

但隨後會的cellForRowAtIndexPath,這將導致一個空的tableview參考,當我嘗試滾動之前進行發射。

我想滾動到VC加載表中的一個特定的行。但是因爲我不知道tableview的cellForRowAtIndexPath何時完成(缺少viewWillAppear),所以我沒有任何地方放置滾動代碼。我已經保留了對tableview的引用,並且可以將其用於滾動。但我可以在哪裏放置滾動代碼?

回答

0

你的意思是你的UIViewController符合UITableViewDelegate和UIScrollViewDelegate協議而不是'繼承'嗎?

您可以直接從父視圖控制器調用[VC viewWillAppear:]。如果VC處理的視圖總是另一個視圖控制器視圖的子視圖,那麼你是否真的需要一個完整的UIViewController實例來支持你的UITableView?您可以爲表視圖提供委託和數據源實現。

然後,您可以在定義表視圖的NIB(通過在Interface Builder中添加對象)或當前VC的父視圖控制器的viewDidLoad方法中實例化委託和數據源。

+0

是 - 「符合」。 VC有一個關聯的NIB,因此它需要是一個ViewController。我明白你的意思是讓NIB實例化tableview委託,但是再次,scrollTo代碼去哪裏? – 4thSpace 2009-06-18 15:15:51

0


當然,當新視圖控制器的視圖被添加並變得可見時,它將調用viewDidAppear而不是viewWillAppear。我會把滾動代碼粘在那裏。

如果仍然無法正常工作,請在init方法中嘗試延遲。事情是這樣的:

[self performSelector:@selector(myScrollingFunction) withObject:nil afterDelay:2.0]; 

你可以玩的延遲時間得到的東西適合,雖然你的視圖控制器的看法可能並不總是相同的時間後出現。