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

LDK*_*LDK 4 uitableview ios

情况:当用户选择单元格时,会向该单元格添加一个按钮.当他们选择新单元格时,该按钮将从上一个单元格中删除并添加到新单元格中.这样可行.问题是当更多数据添加到表中时.所以假设有20个单元格,然后我再添加20个单元格.然后我选择第一个单元格,但是按钮被添加到单元格1 AND单元格21.选择委托方法仅注册被选择的第一个单元格.

从我的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];
Run Code Online (Sandbox Code Playgroud)

在我的方法中,我向表格添加了更多数据:

if(self.selectedCell){
    self.selectedCell.accessoryView = nil;
    self.selectedCell = nil;
}

[self.tableView reloadData];
[self.tableView setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 5

细胞被重复使用.在你cellForRowAtIndexPath:,你忘了清除accessoryView.当细胞被重复使用时,它会accessoryView出现.

我喜欢的技术是设置accessoryViewtableView: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;
  }
}
Run Code Online (Sandbox Code Playgroud)