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; } }