【问题标题】:Custom TableView section headers with NSFetchedResultsController使用 NSFetchedResultsController 自定义 TableView 部分标题
【发布时间】:2015-02-13 21:27:59
【问题描述】:

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

当用户通过在表格单元格上滑动来删除对象时,我会从模型中删除该对象,并且 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]处理该部分中包含的对象

非常感谢您的帮助

【问题讨论】:

    标签: ios objective-c uitableview core-data


    【解决方案1】:

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

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

    【讨论】:

    • 我确实想过这样做,但是如何知道节索引是否仍然对应于我要更新的节?是否在 FRC 调用节更新委托方法之前调用此函数?
    • FRC 会告诉您该部分,如果您想更新与删除项目的部分不同的部分,那么您需要自己跟踪这些部分,以便找到正确的部分。 .
    • 我的意思是,假设您的委托方法被 FRC 调用,它说第 2 节第 1 项被删除。我如何知道 FRC 数据集中的第 2 部分是否对应于该项目被删除的部分,或者该部分是否不再存在,因为它只有一个项目,而 FRC 数据集中的第 2 部分现在是旧的第 3 部分,因为数据集在调用委托之前更改。
    • 我认为最好的方法是遍历 controllerDidChangeContent 中的所有部分标题视图,这些视图在对象和部分的两个单独方法之后被调用。这样我就不会处理不匹配的数据集和表视图。
    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2011-08-26
    • 2013-03-14
    • 2023-03-14
    相关资源
    最近更新 更多