我在表格中有单元格,其中包含自定义字段,允许使用自定义小键盘输入数字。这包括一个标签。当从表格底部到顶部进行选项卡时,我需要(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];
}
答案 0 :(得分:1)
UITableView中的单元格仅在需要时加载。因此,如果您要滚动的单元格位于当前屏幕外的索引处,您将从cellForRowAtIndexPath
获得零响应。
现在,由于UITableview符合UIScrollViewDelegate协议,除了UITableViewDelegate方法之外,您还可以实现这些委托方法。实施一个你知道的,当你的单元格在视野中时会被调用,例如scrollViewDidEndDecelerating:
,然后拨打cellForRowAtIndexPath
可能会有效。