使用NSFetchedResultsController自定义TableView节头

时间:2015-02-13 21:28:00

标签: ios objective-c uitableview core-data

我有表视图节标题,显示有关该节中包含的对象的摘要信息(特定属性的总和)。

当用户通过在表格单元格上滑动来删除对象时,我从模型中删除该对象,并且FetchedResultsController通过其委托从表格视图中删除该单元格。

删除对象:

    NSManagedObject *mo = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [self.context performBlockAndWait:^{
        [self.context deleteObject:mo];
        [[APDatabase database] saveContext];
    }];

作为回应,FRC呼叫其代表,我动画正在删除的单元格。

- (void)controller:(NSFetchedResultsController *)controller
   didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath
     forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{ ...

            case NSFetchedResultsChangeDelete:
                [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
                break;
... }

问题是,部分标题中的总计现在已经更改,但部分标题仍显示旧的总计。我无法调用[tableView reloadData]因为这会停止删除单元格的动画。

如何在删除对象时更新节标题总数?

使用

创建节标题
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

使用[theSection objects]

处理该部分中包含的对象

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

在表视图上调用headerViewForSection:以获取相应部分以获取先前返回的视图,然后直接更新其内容。

这是一种类似于直接更新单元格内容的方法,而不是在更改与正在更新的项目(而不是添加或删除)相关时要求表格视图重新加载。