如何滚动到tableview行?

时间:2009-06-18 14:29:09

标签: iphone cocoa-touch uitableview uiviewcontroller uiscrollview

我有一个UIViewController(名为VC),它继承自UITableViewDelegate和UIScrollViewDelegate。以前的UIViewController加载VC如下:

[self.view addSubview:VC.view];

这意味着viewWillAppear不会触发。我可以在上面一行之后添加该方法:

[VC viewWillAppear];

但是它会在cellForRowAtIndexPath之前触发,这会在我尝试滚动时产生一个空的tableview引用。

我想在加载VC时滚动到表格中的特定行。但是因为我不知道tableview的cellForRowAtIndexPath何时完成(缺少viewWillAppear),所以我没有任何地方可以放置滚动代码。我已经保留了对tableview的引用,可以用它来滚动。但是我可以在哪里放置滚动码?

2 个答案:

答案 0 :(得分:0)

你的意思是你的UIViewController符合UITableViewDelegate和UIScrollViewDelegate协议而不是'inherits'吗?

您可以直接从父视图控制器调用[VC viewWillAppear:]。如果VC处理的视图始终是另一个视图控制器视图的子视图,那么你真的需要一个完整的UIViewController实例来支持你的UITableView吗?您可以为表视图提供委托和数据源实现。

然后,您可以在定义表视图的NIB(通过在Interface Builder中添加对象)或当前为VC的父视图控制器的viewDidLoad方法中实例化您的委托和数据源。

答案 1 :(得分:0)


当然,当添加新视图控制器的视图并使其可见时,它将调用viewDidAppear而不是viewWillAppear。我会把滚动码放在那里。

如果仍然无效,请尝试在init方法中延迟。像这样:

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

虽然视图控制器的视图可能并不总是在相同的时间后出现,但您可以使用延迟时间来获取适合的内容。