2012/06/07

[iOS][Objective-C]セルにチェックマークを付けるタイミングはcellForRowAtIndexPath:で

この書き方はちょっと危険

//セルが選択された際に呼び出される
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//選択されたセルを取得
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
//セルにチェックが付いている場合はチェックを外し、付いていない場合はチェックを付ける
if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}

via:セルにチェックマークを付ける
この書き方は、実際、黄色信号と思われる。

なぜか?

cellForRowAtIndexPath:メソッドがコールされたときに、UITableViewCellが再利用されているときに、上の設定を引っ張ってしまうため、一箇所だけに、チェックしたつもりが、複数箇所同時にチェックされてしまうという現象が発生してしまうのである。

なので、このやり方を実現したい場合は、
セルの表示内容が更新されない?!
に書かれているように、[tableView reloadRowsAtIndexPaths: withRowAnimation:]を使ってチェックマークを更新する必要があります。

これは気をつけたいところです。

0 コメント:

コメントを投稿