UITableview配件类型在滚动时消失

时间:2012-10-23 08:35:37

标签: ios xcode uitableview

我制作了一个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}}

尽快帮助

3 个答案:

答案 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;
 }