5

非常に単純な状況で、一度に複数の行と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];
}

どうもありがとう。

4

0 に答える 0