1

UITableView次のコードで更新しています:

int index = [self.guests indexOfObject:_guests];

[[self tableView] beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
[[self tableView] endUpdates];

しかし、 を呼び出した後[[self tableView] endUpdates]、そのデータソース メソッドは呼び出されません。行を追加する場合は、そのデータソース メソッドを呼び出します。削除の場合はデータソースに何も尋ねる必要はないと思いますが、行を追加する場合は、cellForRow、高さなどのように追加された新しい行に関するほとんどすべてについてデータソースに尋ねる必要があります。データソースメソッドを呼び出していない場合は正しいことを確認してくださいdeleteRowsAtIndexPaths??

4

2 に答える 2

2

deleteRowsAtIndexPaths:indexPathsすべての状況でデリゲート メソッドを呼び出すわけではありません。単に行を削除するだけです。削除する行が多すぎて画面領域を占有している場合は、デリゲート メソッドを呼び出すことがあります。reloadData行を更新するには、明示的に呼び出す必要があります。

ただし、reloadDataすぐに呼び出すと、アニメーションが台無しになるか、奇妙なエラーが発生します。これは、その行が削除され、reload メソッドを呼び出すためです。(気が狂うかもしれません) . reloadData別の解決策は、次のように 0.2 以上のわずかな遅延の後に呼び出すことです。

[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.2]; //calling reloadData after a short delay. 0.2 or whatever suits you.

データソースの配列またはデータを保持するために使用しているものからデータを削除することを忘れないでください。

于 2013-05-08T10:20:04.067 に答える
0

答えは、「ビューが既に入力されていて、すべてのセルがすぐに利用できる場合、なぜすべてのデータソースとデリゲート メソッドを呼び出す必要があるのか​​」という質問です。まあそれは動作であるべきです

于 2013-05-08T12:45:47.223 に答える