滚动时单元格重复。我应该怎么做才能预防它?

Duplicated cell when scrolling. What should I do in order to prevent it?

我是 iOS 编程语言的新手。我尝试在每一行中使用 table 和按钮。

  1. 当我点击第一个单元格中的按钮时,效果很好。
  2. 但是当我向下滚动时,我没有点击的单元格也出现了点击。

我想只在我点击的单元格中显示点击的按钮吗? 代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath{
ClassifyCustomCell * cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

if ([[[arrayResult objectAtIndex:indexPath.row] objectForKey:@"COLABO_FLD_SRNO"] isEqualToString:@"I"]) {
    cell.editButton.hidden = YES;
    cell.folder_name.text = [[arrayResult objectAtIndex:indexPath.row] objectForKey:@"COLABO_FLD_NM"];
}else{
    cell.editButton.hidden = NO;
    cell.folder_name.text = [[arrayResult objectAtIndex:indexPath.row] objectForKey:@"COLABO_FLD_NM"];
    cell.editButton.tag = indexPath.row;
    [cell.editButton addTarget:self action:@selector(editButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    cell.checkButton.tag = indexPath.row;
    [cell.checkButton addTarget:self action:@selector(checkButtonActoin:) forControlEvents:UIControlEventTouchUpInside];
}
return cell;

}

-(void)checkButtonActoin:(UIButton *)sender{
if (sender.selected == YES) {
    sender.selected = NO;
}else if(sender.selected == NO){
    sender.selected = YES;
}else {
    sender.selected = NO;
}

}

UITableView 为新单元格重用单元格子视图的状态。为了防止重复使用,只需在 tableView:cellForRowAtIndexPath: 中明确配置您的子视图。在您的情况下,您需要将按钮的 selected 属性 设置为 YES,如果它被选中,如果它没有被选中则设置为 NO

将 NSMutableArray 属性 添加到您的视图控制器:

@property (strong, nonatomic) NSMutableArray *arrayForSelectedIndexPaths;

更改您的点击方式:

-(void)checkButtonAction:(UIButton *)sender{
    UITableViewCell *cell = (UITableViewCell *) sender.superview.superview...; //find appropriate number of superviews to get your cell
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    if (sender.selected) {
        sender.selected = NO;
        [self.arrayForSelectedIndexPaths removeObject:indexPath];
    }else {
        sender.selected = YES;
        [self.arrayForSelectedIndexPaths addObject:indexPath];
    }
}

然后在tableView:cellForRowAtIndexPath:中添加这一行:

cell.checkButton.selected = [self.arrayForSelectedIndexPaths containsObject:indexPath];