2012-10-23 43 views
5

我做了一個tableView,我需要選擇多個選項。選項被選中,但是當我滾動表格視圖時,複選標記選項會消失,而其他一些行則會顯示該複選標記。 這是我的代碼在didselectedrowAtindex方法table_optionUITableViewselectedcellsNSMutableArrayUITableview附件類型在滾動時消失

[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]; 

請幫助儘快

回答

12

您需要檢查電池已經被選中或不在cellForRowAtIndexPath方法。發生此問題的原因是tableView重新使用單元格。 請將下面的代碼寫入您的cellForRowAtIndexPath方法中,它會解決問題。

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

真棒,非常感謝。這再次 – wasim

+1

解決問題...謝謝我很樂意。感謝您的評論。 :) –

+0

「containsObject」它是一個關鍵,使我從大量作品中拯救出來。 –

0

在我的情況下,只需設置accessoryType = UITableViewCellAccessoryCheckmarkcellForRowAtIndexPath沒有工作。

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