我的UITableView有一组单元格.滑动单元格会导致出现"删除"按钮.点击此删除按钮会导致执行以下代码:
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; [self.itemList removeObjectAtIndex:indexPath.row];
这正确地导致单元格从列表中删除.但是,当我点击UITableVIew中的一个剩余单元格来选择它时,将忽略此点击(即不调用tableView:didSelectRowAtIndexPath).如果我再次点击,那么它可以正常工作(即调用tableView:didSelectRowAtIndexPath).
删除后点击哪个单元格并不重要,删除后等待多长时间,删除后的第一次点击始终被忽略,删除后的第二次点击成功.
基于各种stackOverflow答案,我试过:
self.tableView.editing = NO;
删除后设置
[self.tableView reloadData];
删除后调用
[self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
删除后调用
[self.tableView beginUpdates];
在删除之前和删除[self.tableView endUpdates];
之后调用
同时完成上述所有操作
以上都没有帮助; 删除后的第一次点击仍然始终被忽略.
更新:我还将[self.itemList removeObjectAtIndex:indexPath.row];
代码添加到上面的代码片段中.我的数据源委托方法如下所示:
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.itemList.count; }
上面的代码片段在doDelete方法中被调用以响应按钮tap([self.deleteButton addTarget:self action:@selector(doDelete) forControlEvents:UIControlEventTouchUpInside];
)
更新#2:基于Lyssa的评论,我尝试了以下内容:我删除了对自定义删除按钮和滑动手势的所有引用,然后将此代码添加到我们的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]; } }
这确实有效 - 我现在可以删除行,下一个点击确实可以正常工作.但是,这会删除我们的表格单元格的自定义外观,这首先是我们自定义代码的目的.也许我应该考虑使用上面的方法并自定义删除按钮(我已经做了一些寻找,但还没有找到一个好的答案).