5

複数のオプションを選択する必要がある tableView を作成しました。オプションは選択されていますが、テーブル ビューをスクロールすると、チェック マーク オプションが消え、他の行にそのチェック マークが表示されます。didselectedrowAtindexこれはメソッドtable_optionUITableViewの私のコードselectedcellsです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];

すぐに助けてください

4

3 に答える 3

12

メソッドでセルがすでに選択されているかどうかを確認する必要がありますcellForRowAtIndexPath。この問題は、tableViewがセルを再利用するために発生しています。cellForRowAtIndexPath以下のコードをメソッドに記述してください。問題が解決します。

NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [selectedCells containsObject:rowNsNum]  )
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}
于 2012-10-23T08:39:36.763 に答える
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;
}
于 2014-05-30T13:47:20.020 に答える
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;
 }
于 2014-12-09T17:49:57.713 に答える