我有一个UIViewController(名为VC),它继承自UITableViewDelegate和UIScrollViewDelegate。以前的UIViewController加载VC如下:
[self.view addSubview:VC.view];
这意味着viewWillAppear不会触发。我可以在上面一行之后添加该方法:
[VC viewWillAppear];
但是它会在cellForRowAtIndexPath之前触发,这会在我尝试滚动时产生一个空的tableview引用。
我想在加载VC时滚动到表格中的特定行。但是因为我不知道tableview的cellForRowAtIndexPath何时完成(缺少viewWillAppear),所以我没有任何地方可以放置滚动代码。我已经保留了对tableview的引用,可以用它来滚动。但是我可以在哪里放置滚动码?
答案 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];
虽然视图控制器的视图可能并不总是在相同的时间后出现,但您可以使用延迟时间来获取适合的内容。