滚动查询时UITableView单元格颜色发生变化

在我的应用程序中,我在NSMutableArray中提出一些问题并在tableView行上显示。 我在每个问题下都有两个按钮(tableView行按钮)。 按YES和NO按钮,TableRow颜色分别变为绿色,黄色。

问题是在按下特定行的按钮后行变为绿色。 但滚动后,不需要的细胞也会变成绿色/黄色。

您可以查看我的以下代码并提出建议

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { contentView.hidden = YES; if( tableView == myChklist) { static NSUInteger const kQuestLabelTag = 1; static NSUInteger const kYesButtonTag = 2; static NSUInteger const kNoButtonTag = 3; UILabel *QuestLabel = nil; UIButton *YesButton; UIButton *NoButton; static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; //cell bg //self.myChklist.backgroundColor = [UIColor clearColor]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { QuestLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,5,768,0)]; //some logic code [cell.contentView addSubview:QuestLabel]; NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ; CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; UIButton *YesButton = [UIButton buttonWithType:UIButtonTypeCustom]; //some logic button code [cell.contentView addSubview:YesButton]; UIButton *NoButton = [UIButton buttonWithType:UIButtonTypeCustom]; //some logic button code [cell.contentView addSubview:NoButton]; } else { QuestLabel = (UILabel *)[cell.contentView viewWithTag:kQuestLabelTag]; YesButton = (UIButton *)[cell.contentView viewWithTag:kYesButtonTag]; NoButton = (UIButton *)[cell.contentView viewWithTag:kNoButtonTag]; } QuestLabel.text = [buildingQuest objectAtIndex:indexPath.row]; QuestLabel.numberOfLines = 0; NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; CGRect rect = QuestLabel.frame; rect.size.height = titleSize.height+10; QuestLabel.frame = rect; YesButton.frame = CGRectMake(10,titleSize.height+15,60,30); NoButton.frame = CGRectMake(95,titleSize.height+15,60,30); } if([self getCheckedForIndex:indexPath.row]==YES) { cell.backgroundColor = [UIColor greenColor]; Cam_Button.hidden = NO; } else { cell.accessoryType = UITableViewCellAccessoryNone; } if([self getCheckedForYellow_Index:indexPath.row]==YES) { cell.backgroundColor = [UIColor yellowColor]; } else { cell.accessoryType = UITableViewCellAccessoryNone; } return cell; } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if([self getCheckedForIndex:indexPath.row]==YES) { cell.backgroundColor = [UIColor greenColor]; Cam_Button.hidden = NO; } if([self getCheckedForYellow_Index:indexPath.row]==YES) { cell.backgroundColor = [UIColor yellowColor]; } if ([self.arrayCheckUnchek containsObject:indexPath]) { cell.backgroundColor = [UIColor greenColor]; Cam_Button.hidden = NO; } if ([arrayCheckUnchek2 containsObject:indexPath]) { cell.backgroundColor = [UIColor yellowColor]; } } - (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath { UITableViewCell *Cell = [myChklist cellForRowAtIndexPath:indexPath]; //same code as didSelectRowAtIndexPath method } -(void)NoAction:(id)sender event: (id)event { _cellButtonPress = YES; checkUncheck = YES; NSSet *touches = [event allTouches]; UITouch *touch = [touches anyObject]; CGPoint currentTouchPosition = [touch locationInView:self.myChklist]; NSIndexPath *indexPath = [self.myChklist indexPathForRowAtPoint: currentTouchPosition]; UIButton *button = (UIButton *)sender; UITableViewCell *cell = (UITableViewCell *)button.superview.superview; cell.backgroundColor = [UIColor yellowColor]; [self checkedCellAtYellow_Index:indexPath.row]; [arrayCheckUnchek2 addObject:indexPath]; } 

您需要设置新分配的单元格的背景颜色。 如果你不这样做,那么当重新使用绿色的细胞时,它们会保持绿色。

  if (cell == nil) { cell.backgroundColor = [UIColor clearColor]; ...