2012-10-23 12 views
5

私は複数のオプションを選択する必要があるtableViewを作った。オプションが選択されていますが、テーブルビューをスクロールすると、チェックマークオプションが消え、他のいくつかの行にチェックマークが表示されます。 これはdidselectedrowAtindex方法で私のコードですtable_optionUITableViewあるとselectedcellsNSMutableArrayUITableviewアクセサリタイプがスクロール中に消える

[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はすぐ

あなたはセルをチェックする必要が

答えて

12

がすでに選択されているかいないcellForRowAtIndexPath方法で助けています。この問題は、tableViewがセルを再利用するために発生しています。 cellForRowAtIndexPathメソッドに以下のコードを書いてください。問題が解決します。ちょうどcellForRowAtIndexPathaccessoryType = UITableViewCellAccessoryCheckmarkは動作しませんでした設定私の場合は

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

素晴らしい、おかげでたくさん...これは喜んで再び – wasim

+1

...おかげで問題を解決します。コメントありがとう。 :) –

+0

"containsObject"それは私がたくさんの作品から私を救う鍵です。 –

0

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; 
} 
関連する問題