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