UITableViewCell,两个单元格都获得附件视图

情况:当用户select一个单元格时,一个button被添加到该单元格中。 当他们select一个新的单元格时,该button将从前一个单元格中移除并添加到新的单元格中。 这样可行。 问题是当更多的数据被添加到表中。 所以说,有20个单元格,然后再添加20个单元格。 然后,我select第一个单元格,但是该button被添加到单元格1和单元格21.select委托方法只注册被选中的第一个。

从我的didSelectRowAtIndexPath方法:

if (self.selectedCell) { self.selectedCell.accessoryView = nil; self.selectedCell = nil; } UIButton *downloadButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [downloadButton setTitle:@"Download" forState:UIControlStateNormal]; [downloadButton setFrame:CGRectMake(0, 0, 130, 34)]; self.selectedCell = [self.tableView cellForRowAtIndexPath:indexPath]; self.selectedCell.accessoryView = downloadButton; [self.selectedCell setNeedsDisplay]; 

在我添加更多的数据到我结束的表中的方法:

 if(self.selectedCell){ self.selectedCell.accessoryView = nil; self.selectedCell = nil; } [self.tableView reloadData]; [self.tableView setNeedsLayout]; 

细胞被重复使用。 在你的cellForRowAtIndexPath: ,你忘记了清除accessoryView 。 当单元格被重用时, accessoryView出现。

我喜欢的技术是在tableView:willDisplayCell:forRowAtIndexPath:设置accessoryView tableView:willDisplayCell:forRowAtIndexPath: 这就是在单元格放在屏幕上之前调用的。 然后你可以做一些事情:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if (cell.isSelected) { cell.accessoryView = self.downloadButton; // No reason to create a new one every time, right? } else { cell.accessoryView = nil; } }