1

NSFetchedResultsController を使用して Core Data を操作する UITableView を取得しようとしていますが、UITableViewCellStyleInsert編集中に最後の行として挿入コントロール ( ) も使用します。

挿入コントロールは単なる別の tableviewcell であり、編集スタイルが異なるだけなので、適切な UITableViewDatasource デリゲート メソッドを次のように変更しました。

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

報告された行数も、編集時にそれに応じて更新する必要があります (現時点ではセクションが 1 つしかないと仮定します)。

(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