UITableView deleteRowsAtIndexPaths不起作用

Nic*_*ill 5 cocoa-touch ios ios7

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

创建联系人图像

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

之前和之后

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

- (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];
    }
}
Run Code Online (Sandbox Code Playgroud)

那么为什么那个细胞会继续存在呢?我可以[tableView reloadData]在上面的方法中调用并删除多余的单元格然后它会混淆动画.你能否清楚我在这里做错了什么?

Sen*_*ful 0

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

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

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

选项 4:由于高度不同,请确保 heightForRowAtIndexPath 返回正确的值。您可能需要调用 reloadRowsAtIndexPaths以便表视图了解高度差。