0

我有一个计时器,它调用下面的代码在我的分组 UITableView 的第二部分重新加载一个单元格。除非我向上滚动屏幕以使第一部分/单元格不可见,否则它工作得很好。一旦它“弹回”到正确的位置,我就会看到应该出现在第 0 节中的文本已经出现在第 1 节中,反之亦然。

  [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone];

reloadRowsAtIndexPaths 或 cellForRowAtIndex 路径是否从完整(可见或不可见)单元格的顶部开始工作,还是仅从屏幕上可见的单元格开始工作?换句话说,第 0 部分实际上是否会根据它在屏幕上是否可见而改变?

还有什么会导致 cellForRowAtIndexPath 将错误的数据加载到单元格中?

4

1 回答 1

1

好的,我对您的项目进行了一些尝试,以下是我的建议:

当您将按钮添加到单元格时,请记住在您不想使用它时将其删除(当您刷新单元格时,基本上您创建一个新单元格,并存储第二个以重复使用,所以如果您向下滚动并然后,您将重用该单元格作为名称的单元格)。

  if (cell == nil) 
  {
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }  
 [[cell viewWithTag:2] removeFromSuperview]; 

为此,您必须为按钮设置相应的标签:

  myButton1.tag = 2;
  [cell addSubview:myButton1]; 

而且,将按钮直接添加到单元格,而不是 contentView (这对我有用,我不知道为什么)。

编辑:我上传了您项目的固定版本,下载它

于 2012-07-03T12:07:28.713 回答