UITableView - 当上面有一定数量的单元格时删除最后一个单元格

时间:2012-01-02 05:29:33

标签: iphone uitableview insert

在我的UITableView中,我有一个专用单元格,底部有一个插入控件,允许用户插入新行。

UITableView

我想要做的是当它上面有一定数量的单元格时移除/隐藏这个单元格(在这种情况下为8)。

这是我到目前为止所拥有的:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 1) {
        if ([sites count] == [[BrowserController sharedBrowserController] maximumTabs]) {
            return [sites count];
        } else {
            return [sites count] + 1;
        }
    } else {
        return 1;
    }
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        ...
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        NSString *newSiteAddress = [NSString stringWithString:@"http://"];

        [sites addObject:newSiteAddress];

        if ([sites count] == [[%c(BrowserController) sharedBrowserController] maximumTabs]) {
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }

        [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
        [[(BookmarkTextEntryTableViewCell *)[tableView cellForRowAtIndexPath:indexPath] textField] becomeFirstResponder];
    }   
}

导致抛出以下异常:

2/01/12 4:28:07.956 PM MobileSafari: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 1.  The number of rows contained in an existing section after the update (8) must be equal to the number of rows contained in that section before the update (8), 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).'
*** First throw call stack:
(0x2bc0052 0x2d51d0a 0x2b68a78 0x1cf2db 0x747518 0x75282a 0x7528a5 0x812481c 0x75e7bb 0x8b2d30 0x2bc1ec9 0x6c65c2 0x6c655a 0x76bb76 0x76c03f 0x76b2fe 0x984a2a 0x2b949ce 0x2b2b670 0x2af74f6 0x2af6db4 0x2af6ccb 0x491879 0x49193e 0x6c3a9b 0x4430 0x2db5)

1 个答案:

答案 0 :(得分:0)

以下是Apple's UITableView documentation中与插入和删除单元格相关的段落:

  

单击插入或删除控件会导致数据源   接收tableView:commitEditingStyle:forRowAtIndexPath:message。   您通过调用提交删除或插入   deleteRowsAtIndexPaths:withRowAnimation:或   insertRowsAtIndexPaths:withRowAnimation :,视情况而定。同样在   编辑模式,如果表视图单元格有其showsReorderControl   属性设置为YES,数据源接收   tableView:moveRowAtIndexPath:toIndexPath:message。数据源可以   通过实现选择性地删除对单元的重新排序控制   的tableView:canMoveRowAtIndexPath:

您应该创建名为“insertLastCell”和“deleteLastCell”的新方法(或沿着这些方向的内容),这些方法明确告诉您的表视图通过insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:插入和删除最后一个单元格。< / p>

一旦插入和删除被“提交”,只有然后才能在numberOfRowsInSection方法中报告不同的数字。