我制作了一个tableView,我需要选择多个选项。选项被选中,但是当我滚动表格视图时,复选标记选项消失,其他一些行显示该复选标记。
这是didselectedrowAtindex
方法table_option
UITableView
中的代码selectedcells
NSMutableArray
[table_option deselectRowAtIndexPath:indexPath animated:YES];
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [selectedCells containsObject:rowNsNum] )
{
if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
cell.accessoryType = UITableViewCellAccessoryNone;
else
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[selectedCells removeObject:rowNsNum];
sel.text=@"Select";
// cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
cell.accessoryType = UITableViewCellAccessoryNone;
else
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[selectedCells addObject:rowNsNum];
sel.text=@"Selected";
// cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
[table_option reloadData];
{{1}}
尽快帮助
答案 0 :(得分:12)
您需要在cellForRowAtIndexPath
方法中检查是否已选择单元格。出现此问题的原因是tableView重新使用单元格。
请在您的cellForRowAtIndexPath
方法中写下以下代码,它将解决问题。
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [selectedCells containsObject:rowNsNum] )
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
答案 1 :(得分:0)
就我而言,仅在accessoryType = UITableViewCellAccessoryCheckmark
中设置cellForRowAtIndexPath
并不起作用。
当UITableView
到达其第一个元素时发生问题,如果您尝试滚动更多元素,则可见单元格会关闭,其复选标记将消失。
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
[cell setAccessoryType:UITableViewCellAccessoryNone];// tricky part is this line
if ( [selectedCells containsObject:rowNsNum] )
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
答案 2 :(得分:0)
检查此示例
cell.accessoryType = UITableViewCellAccessoryNone;
for (int x = 0; x < selectedIds.count; x++) {
if ([[selectedIds objectAtIndex:x] isEqualToString:[[source objectAtIndex:[indexPath row]] objectForKey:@"id"]])
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}