Reputation: 708
I have made a tableView in which i need to select multiple options. The options are selected but when i scroll the table view the check mark option get disappear and some other rows displays that check mark.
This is my code in didselectedrowAtindex
method table_option
is UITableView
and selectedcells
is 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];
pls help soon
Upvotes: 5
Views: 3479
Reputation: 1279
Check this example
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;
}
Upvotes: 0
Reputation: 644
In my case just setting accessoryType = UITableViewCellAccessoryCheckmark
in cellForRowAtIndexPath
didn't work.
The problem occurs when the UITableView
reaches its first element and if you try to scroll more, the visible cells go down and their checkmarks gets gone.
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;
}
Upvotes: 0
Reputation: 107121
You need to check the cell is already selected or not in the cellForRowAtIndexPath
method. This issue is happening because tableView re-uses the cells.
Please write the below code in your cellForRowAtIndexPath
method, it'll solve the issue.
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [selectedCells containsObject:rowNsNum] )
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
Upvotes: 12