使用editActionsForRowAtIndexPath时,删除UITableViewCell的显示滑动的正确方法是什么?

时间:2015-01-28 14:49:58

标签: objective-c uitableview ios8

我有一个tableView,我可以在其中滑动单元格以显示选项 - 在我的情况下,'分享'并且'删除'使用以下方法的选项:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

当用户在单元格上滑动以显示选项,然后点按delete时,我会设置UIAlertController并确认。如果我删除我的核心数据库中的对象并且我的NSFetchedResultController负责更新tableView

,那么一切都很好,如果他们说删除

如果用户拒绝执行删除操作,则单元格仍然保持幻灯片效果仍显示选项。我希望它消失。我知道[tableView reloadData]或者更有效率地重新加载一个单元格将解决问题,但是我错过了可以完成工作的单元格上的方法调用或属性吗?

3 个答案:

答案 0 :(得分:4)

如果您在此处对表格视图进行编辑,则会将单元格设置为正常状态。

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    [table setEditing:NO animated:YES];
}

如果表格处于编辑状态,其中显示每个单元格旁边的删除按钮,这将导致所有这些删除按钮消失,这可能不是您想要的行为。在这种情况下,您可以立即将表视图设置回编辑模式。动画看起来很好:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    [table setEditing:NO animated:YES];
    if (yourWasPreviouslyEditingBoolean) {
        [table setEditing:YES animated:YES];
    }
}

请注意,您需要自己跟踪此状态。检查表视图的isEditing值将始终返回true。

我无法找到告诉单元格直接停止编辑。

答案 1 :(得分:1)

那么,您的问题是关于如何在UITableView上重新加载一个特定的单元格?不难。

以下代码可以解决问题: -

NSIndexPath * indexpath = [NSIndexPath indexPathForRow:self.deletedTableRow
                                             inSection: self.deletedTableSection];
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexpath] 
                      withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

答案 2 :(得分:0)

在导航栏上放置自定义后退按钮解决了同样的问题。我有UITableViewController和UINavigationController。 “自定义后退按钮”操作(实现如此)的行为类似于willDisappear。

请注意滑动“返回”手势。