1

我正在尝试使用 NSFetchedResultsController 让 UITableView 与 Core Data 一起使用,同时UITableViewCellStyleInsert在编辑期间将插入控件 ( ) 作为最后一行。

由于插入控件只是另一个tableviewcell,只是编辑风格不同,所以我更改了相应的UITableViewDatasource委托方法,例如:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView
          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self isInsertionControl:indexPath]) {
        return UITableViewCellEditingStyleInsert;
    } else {
        return UITableViewCellEditingStyleDelete;
    }
}

在编辑时,报告的行数也应该相应地更新(假设现在只有一个部分):

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResultsController.sections[section];

    NSUInteger numberOfObjects = sectionInfo.numberOfObjects;

    // FIXME, things will go out of hand with more than one section.
    if (self.tableView.editing) {
        return numberOfObjects + 1;
    } else {
        return numberOfObjects;
    }
}

如果需要,返回插入行的相应单元格:

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = nil;

    if ([self isInsertionControl:indexPath]) {
        static NSString *InsertIdentifier = @"InsertCell";
        tableViewCell = [tableView dequeueReusableCellWithIdentifier:InsertIdentifier
                                                        forIndexPath:indexPath];

    } else {
        tableViewCell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier
                                                        forIndexPath:indexPath];

        [self configureCell:tableViewCell atIndexPath:indexPath];
    }

    return tableViewCell;
}

这不起作用,谁能帮我找出原因?

快速编辑

需要明确的是,我的故事板中有 2 个原型单元格,一个用于常规内容,一个用于表示插入行,两者都具有适当的重用标识符。

4

0 回答 0