wasim
wasim

Reputation: 708

UITableview accessory type disappear while scrolling

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

Answers (3)

Nuno Ferro
Nuno Ferro

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

mkeremkeskin
mkeremkeskin

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

Midhun MP
Midhun MP

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

Related Questions