Categories: objective-c

【objective-c】cellを削除した際にreloadDataするとアニメーションがキャンセルされる

UITableViewを使って以下の様なcellを表示しているとする

[1 hige]
[2 hoge]
[3 hage]

この状態で[2 hoge]を削除したあとにこういう挙動になってほしい。

[1 hige]
[2 hoge] <- delete
[3 hage]

[1 hige]
[2 hage]

数字の部分は順番通りになる。

この時に削除アニメーションを表示しながらスムーズに表示を更新する方法について備忘録

通常だったら以下のように削除して更新みたいな感じで書くと思う。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView reloadData];
    }
}

しかし、これでやると実は、削除アニメーションが描画されずにいきなり削除後のセルの状態になってしまうのだ。

そこで、削除アニメーションもやりつつ削除後に数字を更新するために自分は以下の方法をとった。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.3];
    }
}

0.3秒後にreloadDataすることによっていい感じに更新される。

けど、なんかアニメーション後に呼び出されるメソッドとかないのかなぁ。

ちょっと強引な気がするからもうちょいスマートな方法があってもいい気がする。

mogmet

View Comments

Share
Published by
mogmet