删除tableView行

时间:2013-12-04 00:46:11

标签: ios iphone objective-c uitableview

我有自定义单元格的动态tableView,例如,如果它的值为0,我想删除一些单元格。

这是我的tableView:cellForRowAtIndexPath方法:

{
    NSString *CellIdentifier;
    UITableViewCell *cell;

    if (indexPath.row == 0){
        CellIdentifier = @"adress cell";
        CustomAdressCell *cell = [detailsTableView dequeueReusableCellWithIdentifier:CellIdentifier];

       if (cell == nil) {
            NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"CustomTimeCell" owner:self options:nil];
            cell = [objects lastObject];
        }
        cell.someValue = self.someVal;

      return cell;
    }

    else if (indexPath.row == 1){
        CellIdentifier = @"phone cell";
        CustomPhoneCell *cell = [detailsTableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {
            NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"CustomPhoneCell" owner:self options:nil];
            cell = [objects lastObject];
        }

        indexPathTest = indexPath;//index path for delete
        cell.someValue = self.someVal2;

        return cell;
    }
...
    else return cell;
}

例如:如果我在第二行有cell.someValue = 0,我需要删除这一行。我怎样才能实现这一目标?谢谢!

编辑:我在使用以下代码(自定义方法)在另一个VC中初始化tableView之后尝试删除行:

        [self.detailsTableView beginUpdates];
        [self.detailsTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPathTest]
                         withRowAnimation:UITableViewRowAnimationFade];
        [self.detailsTableView endUpdates];

我有错误:

Invalid update: invalid number of rows in section 0.  The number of rows contained in an 
existing section after the update (4) must be equal to the number of rows contained in that  
section before the update (4), 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).'

其他一些对我没有帮助的问题:

2 个答案:

答案 0 :(得分:1)

每当someValue设置为0时,您可能需要删除该行。如同,删除是任何进程将其设置为0的一部分,而不是基于某个随机事件抽象地做出反应。点击“0”按钮或输入0并关闭键盘,然后检查新值是否为0.如果是,则删除该行,如果不是,则不执行任何操作。

您还可以设置一个计时器,以便每隔X秒循环一次并根据需要删除它们,但这样效率会低得多。

无论哪种方式,您可能只会使用标准的deleteRowsAtIndexPaths:withRowAnimation:方法。有关该方法的详细信息,请查看UITableView documentation

答案 1 :(得分:1)

请注意,tableview是与其关联的数组的图形表示(根据您的要求)。话虽这么说,当您从表视图中删除一行时,您应该从数组中删除该行/对象,您正在使用它来构建您的tableview。如果没有这样做,你将最终出现在tableview和数组反映不同状态的情况下(这正是错误告诉你的)。