iOS UITableViewCellAccessoryCheckmark每次滚动都可见

我有一个列表,我用它作为checkbox。 我已启用或禁用选中行上的复选标记。 但是当我滚动列表中的每10行之后的标记行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath]; if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) { oldCell.accessoryType = UITableViewCellAccessoryNone; } else { oldCell.accessoryType = UITableViewCellAccessoryCheckmark; } } 

UItableView重用每个滚动单元格,所以使用条件按配件types不是一个好的做法。 你可以创build一个NSMutableArray与选定的项目和检查按照下面的条件。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } if ([selected containsIndex:indexPath.row]) { [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; } else { [cell setAccessoryType:UITableViewCellAccessoryNone]; } // Do the rest of your code return cell; } 

didSelectrowAtindexpath方法中,您可以添加和删除选定的项目。

因为UITableView重用了这个单元格。 因此,在方法cellForRowAtIndexPath ,你将不得不检查一个特定的单元格(特定的部分和行),如果需要检查,提供附件types。

如果该单元不需要,则将附件types设置为无。

您需要将您的逻辑设置为cellForRowAtIndexPath单元格的附件types,并使用复选标记标识要标记的单元格,您可以在didSelectRowAtIndexPath:标记列表中的对象didSelectRowAtIndexPath:或在此处pipe理列表中选定/未选定对象的数组。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) { [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark]; [NSMutableArray addObject:[AnotherMutableArray objectAtIndex:indexPath.row]]; } else { [selectedCell setAccessoryType:UITableViewCellAccessoryNone]; [NSMutableArray removeObject:[AnotherMutableArray objectAtIndex:indexPath.row]]; } [tableView deselectRowAtIndexPath:indexPath animated:NO]; } 

同样在你的viewDidLoad中,实例化你两个可变数组 –

 yourmutableArray1 = [[NSMutableArray alloc] init];
 yourmutableArray2 = [[NSMutableArray alloc] init];