非常に単純な状況で、一度に複数の行と1つの行だけにチェックマークを付ける必要があります。ユーザーが行Xを選択すると、行Xにチェックマークが付けられ、前に選択した行からチェックマークが削除されます。しかし、変更をアニメーション化する方法は?(フェードインフェードアウト)。
多分これはうまくいくと思いました:
[UIView animateWithDuration:1.0 animations:^{
cell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
previous.accessoryType = UITableViewCellAccessoryCheckmark;
previous.accessoryType = UITableViewCellAccessoryNone;
}];
そしてまた
[tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade];
1つ目は何もせず、2つ目はpaths配列内のNSIndexPathによって参照される両方のセルを削除しました。また、[tableView beginUpdates/endUpdates]でreloadRowsAtIndexPathsをラップしてみました。
アップデート:
着信indexPath(以下の簡単な実装)でreloadRowsAtIndexPathを呼び出すと、同じことが行われ、行は「空白になります」。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
テーブルは静的テーブルです。セルごとにプロパティを宣言して合成し、cellForRowAtIndexPath
行ごとに対応するセルを返します。
.h
@property (strong, nonatomic) IBOutlet UITableViewCell *cellNever;
@property (strong, nonatomic) IBOutlet UITableViewCell *cell030;
@property (strong, nonatomic) IBOutlet UITableViewCell *cell100;
.m
@synthesize cellNever;
@synthesize cell030;
@synthesize cell100;
...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [cells objectAtIndex:indexPath.row];
}
- (void) viewDidLoad {
cells = [NSArray arrayWithObjects:cellNever, cell030, cell100, cell130, cell200, cell230, cell300, cell400, cell500, nil];
}
どうもありがとう。