2012-10-23 10 views
5

Ho creato una tabellaView in cui ho bisogno di selezionare più opzioni. Le opzioni sono selezionate ma quando scorro la vista tabella l'opzione segno di spunta scompare e alcune altre righe mostrano quel segno di spunta. Questo è il mio codice nel metodo didselectedrowAtindextable_option è UITableView e selectedcells è NSMutableArrayIl tipo di accessorio UITableview scompare durante lo scorrimento

[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]; 
    [email protected]"Select"; 
    // cell.accessoryType = UITableViewCellAccessoryNone; 

} 
    else 
{ 
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    else 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 

    [selectedCells addObject:rowNsNum]; 
    [email protected]"Selected"; 
    // cell.accessoryType = UITableViewCellAccessoryCheckmark; 

} 



[table_option reloadData]; 

pls aiutano presto

risposta

12

È necessario controllare la cella è già selezionata o meno nel metodo cellForRowAtIndexPath. Questo problema sta accadendo perché tableView riutilizza le celle. Si prega di scrivere il codice seguente nel vostro metodo cellForRowAtIndexPath, risolverà il problema.

NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row]; 
if ([selectedCells containsObject:rowNsNum] ) 
{ 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else 
{ 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+1

impressionante, grazie mille .. questo risolve il problema ... grazie ancora una volta – wasim

+1

Con piacere. Grazie per il commento. :) –

+0

"containsObject" è una chiave, salvandomi da molte opere. –

0

Nel mio caso è sufficiente impostare accessoryType = UITableViewCellAccessoryCheckmark in cellForRowAtIndexPath non ha funzionato.

Il problema si verifica quando UITableView raggiunge il suo primo elemento e se si tenta di scorrere di più, le celle visibili si abbassano e i loro segni di spunta non sono più disponibili.

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; 
} 
0

controllare questo esempio

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; 
} 
Problemi correlati