12

イライラする事実: を呼び出した後tableView:moveRowAtIndexPath:toIndexPath:tableView:cellForRowAtIndexPath:はその行に対して呼び出されません。

更新ブロック内のreloadRowsAtIndexPaths:withRowAnimation:after または beforeの呼び出しも機能しません: Inconsistency error が発生します。tableView:moveRowAtIndexPath:toIndexPath:UITableView

2 つの回避策があります。別の更新ブロック内で移動またはリロードする代わりに、削除 + 挿入です。

私の質問は:同じ更新ブロック内で UITableView の行をリロードして移動する他の方法はありますか?

4

4 に答える 4

5

移動とリロードを同時に行うことはできないと思います。いくつかのアプローチを試しましたが、思いついた最善の解決策は、バッチ更新の直前にリロードを行うことです。reloadRows一括更新のアニメーションと競合しそうなのでアニメーションはしません。

[tableView reloadRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationNone];
[tableView beginUpdates];
//inserts, deletes and moves here
[tableView endUpdates];

また、通常、次のような別の方法でセル構成ロジックを配置します。

- (void)tableView:(UITableView *)tableView configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;

直接呼び出してreloadRowsAtIndexPaths完全にバイパスできるようにします。この方法でも組み込みのアニメーションは得られませんが、独自のアニメーションを作成できます。

于 2013-08-06T16:26:47.883 に答える
1
[_tableview beginUpdates];

// write code here to delete and move row...

[_tableview endUpdates];

 // now after end update call reload method to reload cell..  

    [self.tableview reloadRowsAtIndexPaths:[NSArray arrayWithObjects:
    [NSIndexPath indexPathForRow:_arrayForData.count-1 inSection:indexpathforSelectedRow.section], nil] withRowAnimation:UITableViewRowAnimationNone];
于 2015-08-12T10:40:33.100 に答える
-1

[TableView reloadData] で成功しました。データ ソースを更新していることを確認し、リロード コードを適切な場所に配置してください。

于 2013-08-06T15:15:47.883 に答える