私のUITableViewには、セルのコレクションがあります。セルをスワイプすると、[削除]ボタンが表示されます。この削除]ボタンをタップすると、次のコードを実行させる:最初のタップは、deleteRowsAtIndexPathsの後に無視されます。
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[self.itemList removeObjectAtIndex:indexPath.row];
これは正しくセルがリストから削除されます。ただし、UITableVIewの残りのセルの1つをタップして選択すると、このタップは無視されます(tableView:didSelectRowAtIndexPathは呼び出されません)。もう一度タップすると正しく動作します(つまり、tableView:didSelectRowAtIndexPathが呼び出されます)。
削除後どのセルをタップしても問題ありません。削除後の最初のタップは常に無視され、削除後の2回目のタップは成功します。削除する前
[self.tableView beginUpdates];
を呼び出し、削除[self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
を呼び出した後
- を
[self.tableView reloadData];
を呼び出し、削除 - 後
self.tableView.editing = NO;
を設定し、:様々なStackOverflowの回答に基づいて、私が試してみました
[self.tableView endUpdates];
削除後 - 上記のすべてを同じタイミングで行うe
上記のどれも役に立たなかった。削除後の最初のタップは常に無視されます。
更新: また、上記コードスニペットに[self.itemList removeObjectAtIndex:indexPath.row];
コードを追加しました。 マイデータソースデリゲートメソッドは次のようになります。
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.itemList.count;
}
上記ボタンのタップに応じてdoDeleteメソッドで呼び出されているコードスニペット([self.deleteButton addTarget:self action:@selector(doDelete) forControlEvents:UIControlEventTouchUpInside];
)
UPDATE#2:Lyssaのコメントに基づいて、I以下試してみました:私はすべての私たちのカスタムへの参照ボタンを削除し、私たちのスワイプジェスチャーを削除してから、私たちのUITableViewデリゲートにこのコードを追加:
-(BOOL) tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
-(void) tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.itemList removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
}
仕事をん - 私は今、行を削除することができますし、次のタップは正しく機能します。しかし、これは最初のカスタムコードの目的であったテーブルセルのカスタムルックアンドフィールを削除します。おそらく、私は上記の方法を使用し、代わりに削除ボタンをカスタマイズすることを検討する必要があります(私はいくつかの見た目をしており、まだ良い答えを見つけていません)。
セルを削除した後、numberOfRowsInSection:からcountを減らしますか? – Greg
あなたのテーブルビューのデータソースを更新しましたか?削除したセルのデータオブジェクトを削除しましたか? – thorb65
あなたはどこにdeleteRowsAtIndexPathを入れましたか? – asjj