【问题标题】:UITableView deleteRowsAtIndexPaths not workingUITableView deleteRowsAtIndexPaths 不起作用
【发布时间】:2014-01-14 14:04:04
【问题描述】:

我不太确定这里发生了什么,但我遇到了我正在使用的联系表格。在我的表单中,我添加了向联系人添加电子邮件地址的功能。如下图所示,一旦用户点击“添加电子邮件”,就会在“电子邮件”部分添加一行。

但是,在我点击删除电子邮件后,添加电子邮件按钮下方会出现一个额外的单元格(如下图所示)。

似乎之前的删除单元格中有一个小红框,就好像表格没有重新加载一样。这是我的删除代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if( editingStyle == UITableViewCellEditingStyleDelete )
    {
        // Update the data source
        NSMutableArray *fields = (NSMutableArray *)self.fields[@(indexPath.section)];
        [fields removeObjectAtIndex:indexPath.row];
        NSMutableArray *values = (NSMutableArray *)self.values[@([self fieldTypeAtIndexPath:indexPath])];
        [values removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
    }
}

那么为什么那个单元格之后还剩下呢?我可以在上面的方法中调用[tableView reloadData],它会删除多余的单元格,但会弄乱动画。你能澄清一下我在这里做错了什么吗?

【问题讨论】:

    标签: ios cocoa-touch ios7


    【解决方案1】:

    我遇到了同样的问题,我想这可能是 iOS7 中的一个错误,它没有正确重绘单元格,我修复了它,但没有以有效的方式,只是在 "cellForRowAtIndexPath" 中,总是创建一个新单元格,不要出队。

    【讨论】:

      【解决方案2】:

      这看起来像一个错误。

      我刚刚注意到,即使是 Apple 在他们的提醒应用程序中也存在同样的错误。这似乎与从具有可变高度项的 UITableView 中删除行有关。

      在 Apple 的提醒应用程序中,当您从具有可变高度项目的长列表中删除某些内容时,您会在一瞬间看到完全相同的视觉伪影。然后表格跳转并且列表看起来正确。我假设 Apple 只是在删除项目后一秒钟重新加载整个表格视图,以修复视觉故障。

      我的建议是将此作为错误报告给 Apple。现在你可以像 Apple 一样重新加载整个表格视图。

      【讨论】:

      • 我遇到了完全相同的问题。即使我重新加载,已删除的单元格也会出列并显示为删除状态(删除可见)。
      【解决方案3】:

      选项 1:在调用 deleteRowsAtIndexPaths 之前,您必须确保 numberOfRowsInSection 将返回正确的值(例如,如果您最初在该部分中有 2 行,现在应该返回 1 行)。

      选项 2:如果这不是问题,我会尝试不同的动画类型(例如 UITableViewRowAnimationAutomatic),看看是否有任何效果。

      选项 3:确保 cellForRowAtIndexPath 返回一个有效的单元格,其内容被重置。否则,它可能会重复使用无效的单元格或显示以前存在的内容。

      选项 4:由于高度不同,请确保 heightForRowAtIndexPath 返回正确的值。 You probably need to call reloadRowsAtIndexPaths 以便表格视图了解高度差。

      【讨论】:

      • 它确实返回了正确的数字。我相信你的意思是numberOfRowsInSection...
      • @NickONeill:你尝试过不同的动画类型吗?比如自动?
      • 所以 numberOfRowsInSection 是正确的。尝试您的其他问题
      • 尝试了你的动画理论,但没有成功。这不是问题。
      • 单元格本身是有效的。两行的高度略有不同(3 个像素不同),这就是单元格显示在下方的原因。然而奇怪的是旧单元格仍在显示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多