我有一个计时器,该计时器调用下面的代码以在分组的UITableView的第二部分中重新加载单元格。除非我向上滚动屏幕,否则第一部分/单元格看不到,它的工作原理非常好。一旦它“弹回”到正确的位置,我看到应该在第0部分显示的文本已经在第1部分出现了,反之亦然。
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone];
reloadRowsAtIndexPaths或cellForRowAtIndex路径是否从完整(可见或不可见)单元格的顶部开始工作,还是仅从屏幕上可见的单元格开始工作?换句话说,第0部分实际上是否根据在屏幕上可见而改变?
还有什么会导致cellForRowAtIndexPath将错误的数据加载到单元格中?
最佳答案
好的,我在您的项目中扮演了一个角色,这是我的建议:
在将按钮添加到单元格时,请记住在不想使用它时将其删除(刷新单元格时,基本上是创建一个新单元格,并存储第二个单元格以供重复使用,因此,如果向下滚动并然后向上,您将重复使用该单元格作为名称的单元格)。
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[[cell viewWithTag:2] removeFromSuperview];
为此,必须将相应的标签设置为按钮:
myButton1.tag = 2;
[cell addSubview:myButton1];
而且,直接将按钮添加到单元格中,而不是添加到contentView中(这仅对我有用,我不确定为什么)。
编辑:我上载了您项目的固定版本download it。
关于objective-c - UITableView reloadRowsAtIndexPaths和cellForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11270889/