如何删除表视图中的单元格

时间:2013-02-22 12:11:52

标签: iphone ios

有人可以建议我的代码中存在什么问题......

self.modleClass.foldersAray有一个对象,tableview有一个部分和一行

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete the row from the data source
        [self.tableview setEditing:YES animated:YES];

        [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs];

        [tableView reloadData];
   }
}

我收到如下错误。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

5 个答案:

答案 0 :(得分:3)

这样做,

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

      if (editingStyle == UITableViewCellEditingStyleDelete) {

          [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];

          [tableView reloadData];
      }
}

足够.........

答案 1 :(得分:2)

如果tableView基于foldersAray,则从该数组中删除对象并重新加载tableview将导致删除此单元格。 您可以删除该行:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs];

答案 2 :(得分:1)

此错误意味着您必须更新数据源(包含数据,字典或任何您使用的数组)

例如: 删除前有5个单元格,dataArray中有5个对象。在调用deleteRowsAtIndexPaths:之前,我们必须从dataArray中删除与此单元格关联的对象,然后才调用deleteRowsAtIndexPaths:。而是使用[tableView reloadData],使用

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

P.S。我明白了,你从数据源中删除了对象,所以仔细检查一下,也许你错过了什么

答案 3 :(得分:1)

如果你想要动画试试这个,如果你不想动画使用@Mountain Lion的答案。

 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
 forRowAtIndexPath:(NSIndexPath *)indexPath  {

       if (editingStyle == UITableViewCellEditingStyleDelete) 
         {
             [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row];
             [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade];
       } 
 }

如果你在导航上有编辑按钮,你应该打电话

  

[self.tableView setEditing:YES animated:YES];

开始编辑的方法内部。

答案 4 :(得分:1)

如果所需的内存对你来说无关紧要...那么你可以通过将高度设置为0来显着删除(隐藏)单元格。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row%2) {
        return 0;
    }
    return 100;
}

P.S:上面的虚拟代码将大大删除备用单元格。