@dasblinkenlightの答えは確かにもっとエレガントですが、あなたには高度すぎるかもしれません。
本質は、どのセルがチェックされ、どのセルがチェックされていないかを追跡することです。何かが変更されたら、テーブルビューをリロードして、チェックマークを更新します。
これを追跡するには、独自の変数を作成する必要があります。ビットマップは非常に経済的でエレガントですが、理解するのが難しく、多数の行に拡張できない場合があります。または、配列を使用することもできます。
NSMutableArray *checkedArray = [NSMutableArray arrayWithObjects:
[NSNumber numberWithBool:YES],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
[NSNumber numberWithBool:NO],
nil];
インデックスパスを指定して行を変更するには:
[checkedArray replaceObjectAtIndex:indexPath.row
withObject:[NSNumber numberWithBool:YES]]; //add
[checkedArray replaceObjectAtIndex:indexPath.row
withObject:[NSNumber numberWithBool:NO]]; //remove
またcellForRowAtIndexPath
、アクセサリを明示的に設定してください。
if ([[checkedArray objectAtIndex:indexPath.row] boolValue]) {
cell.accessoryType = UITableViewCellAccessoryTypeCheckmark;
}
else {
cell.accessoryType = UITableViewCellAccessoryTypeNone;
}