0

我有一个继承自 UITableViewDelegate 和 UIScrollViewDelegate 的 UIViewController(名为 VC)。之前的 UIViewController 加载 VC 是这样的:

[self.view addSubview:VC.view];

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

[VC viewWillAppear];

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

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

4

2 回答 2

0


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

如果这仍然不起作用,请尝试延迟 init 方法。像这样的东西:

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

您可以玩弄延迟时间以获得适合的东西,尽管您的视图控制器的视图可能并不总是在相同的时间后出现。

于 2009-11-28T06:21:52.943 回答
0

你的意思是你的 UIViewController 符合 UITableViewDelegate 和 UIScrollViewDelegate 协议而不是“继承”?

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

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

于 2009-06-18T14:59:34.503 回答