滚动到单元格然后获取子视图

时间:2010-12-17 02:16:07

标签: iphone uitableview tabs

我在表格中有单元格,其中包含自定义字段,允许使用自定义小键盘输入数字。这包括一个标签。当从表格底部到顶部进行选项卡时,我需要(i)将表格滚动到顶部,然后(ii)选择该表格中的自定义字段。

我发现如果在调用scrollToRowAtIndexPath后直接调用cellForRowAtIndexPath,前者返回一个空单元格。如果再次调用,则在滚动完成后,将按预期返回单元格。我需要自己的单元格,所以我可以通过标签值获取自定义视图,然后选择它。

我一直在努力寻找解决方案。一种可能是在滚动后插入延迟以允许它完成。但我尝试过使用performSlector:withObject:afterDelay但没有成功。

这是我按下选项卡时调用的代码。

-(void) customDualViewTabbed:(CustomDualView *)dualView {

 UITableViewCell *cell=(UITableViewCell*)([dualView superview].superview);
 NSIndexPath *fromIndexPath=[self.tableView indexPathForCell:cell];
 NSIndexPath *toIndexPath;

 if ((fromIndexPath.row+1)<[self.tableView numberOfRowsInSection:fromIndexPath.section]){
  toIndexPath = [NSIndexPath indexPathForRow:(fromIndexPath.row+1) inSection:fromIndexPath.section];
 }
 else {
  toIndexPath = [NSIndexPath indexPathForRow:0 inSection:fromIndexPath.section];
  [[self tableView] scrollToRowAtIndexPath:toIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
 }

 //get cell we tabbed to
 cell=[self.tableView cellForRowAtIndexPath:toIndexPath];

 CustomDualView *dualView2 =(CustomDualView *)[cell viewWithTag:dualView.tag];

 [dualView2  setSelected:(SelectedState)SelectedLeftTabbed];
}

1 个答案:

答案 0 :(得分:1)

UITableView中的单元格仅在需要时加载。因此,如果您要滚动的单元格位于当前屏幕外的索引处,您将从cellForRowAtIndexPath获得零响应。

现在,由于UITableview符合UIScrollViewDelegate协议,除了UITableViewDelegate方法之外,您还可以实现这些委托方法。实施一个你知道的,当你的单元格在视野中时会被调用,例如scrollViewDidEndDecelerating:,然后拨打cellForRowAtIndexPath可能会有效。