tableview 删除部分中的最后一行

Posted

技术标签:

【中文标题】tableview 删除部分中的最后一行【英文标题】:tableview remove last row in section 【发布时间】:2011-05-05 02:39:01 【问题描述】:

我在 ***/google 上做了很多小时的研究,并研究了几篇关于类似问题的帖子。然而,他们都没有解决我遇到的特定问题。

简而言之,我有一个 NSMutableDictionay(-ies) 的 NSMutableArray。每个字典都包含一个 NSMutableArray。当我删除数组中的最后一项时,我也想删除字典。用tableview的话来说,我想在删除该部分的最后一行时删除该部分。

我确定数据源是一致的。

这里的帖子:UITableView: deleting sections with animation 建议如果要删除的行是最后一行,则直接删除该部分。

如果该部分是我的根数组中的最后一个部分,这可以正常工作。

我发现的错误是,如果部分不是最后一个部分,则后面的部分将取代它。系统在绘制删除动画时,会抛出NSInternalInconsistencyException

比如说,我有第 0 节和第 1 节,都只有一行。当我删除 indexPath (0,0) 时,我检测到应该改为第 0 节,因为它只有一行,然后我删除 commitEditingStyle 中的第 0 节@

抛出异常是因为用户删除了 Section 0 中的 Row 0,所以 Section 0 中的结果行数应该从 1 变为 0。但是,删除之后,旧的 Section 1 现在变成了 Section 0,并且它将返回第 0 节中的行数为 1。

这里有什么建议吗?还是我错过了一些非常简单的东西?

我在 commitEditingSytle 中的代码:

[tableView beginUpdates];
[... remove the  item from array of this dictionary...]
// if last row in section, remove the section
NSNumber *section = [NSNumber numberWithUnsignedInteger: indexPath.section];
if ([[FoodTypes subtypes:section] count] == 0) 

    [...remove the dictionary from root array...]

    [tableView deleteSections: [NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation:YES];

else 

    // otherwise, remove the row only
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

[tableView endUpdates];

【问题讨论】:

Leo 你有没有找到解决这个问题的方法,在哪里保留删除动画?或者您对 reloadData 方法感到满意? 【参考方案1】:

如果你想从你的数组中删除一个字典,它是作为下标变量的对象,那么你需要这一行。

[yourObject removeObjectAtIndex:indexPath.section];

然后通过这一行重新加载表格

[yourTable reloadData];

现在,由于您的表依赖于此数据源,因此它会自动从表中删除。

【讨论】:

在 else 语句中,我认为@leo 也需要从数组中删除该行对象 这是一个有效的技巧,它节省了大量的编程工作,但失去了删除动画的好处。有没有办法保留动画? @leo 在重新加载数据的情况下,您无法为动作设置动画。 @tegbanis 你是对的,我认为没有 if 和 else,同样的事情也会发生。

以上是关于tableview 删除部分中的最后一行的主要内容,如果未能解决你的问题,请参考以下文章

在ios7中删除TableView的最后一行时出现动画问题

删除 Table View() 最后一行下方的灰色带而不拉伸单元格?

从 tableView 中删除一行,在 section 中有多行

删除 Tableview NSFetchedResultsController 中的最后一节行

使用 NSFetchedResultsController 删除部分中的最后一行 -> 崩溃

如何删除最后一行并在表格视图中添加更多行?