UITableView reloadRowsAtIndexPaths和cellForRowAtIndexPath

时间:2012-06-30 02:07:02

标签: objective-c ios uitableview

我有一个计时器,它调用以下代码重新加载我的分组UITableView的第二部分中的单元格。除非我向上滚动屏幕以便无法看到第一部分/单元格,否则它的工作完全正常。一旦它“弹回”到正确的位置,我看到应出现在第0部分的文本出现在第1部分,反之亦然。

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

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

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

1 个答案:

答案 0 :(得分:1)

好的,我在你的项目上玩了一下,这是我的建议:

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

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

要使其正常工作,您必须将相应的标记设置为按钮:

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

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

编辑:我上传了项目的固定版本download it