单元格更新后更新UITableView节标题

时间:2012-08-17 15:00:53

标签: ios uitableview sectionheader

希望有人可以提供帮助。

我目前有一个包含一组部分的tableview,在我的titleForHeaderInSection中,我返回一个字符串,其中包含要显示在节标题中的节单元格中包含的值之和。这很好,但是当我更新单元格值时,我希望titleForHeaderInSection更新并刷新我的值总和。目前,用户需要将标题滚动到视线之外,然后返回以进行刷新。我一直在谷歌上搜索我是否能找到一个解决方案,看到一些示例建议在标题中包含一个标签,但我需要这些部分是动态的,因此无法为每个部分创建标签,我也尝试过使用reloadsection但是这个doesent正常工作,tableview reloaddata在每次在tableview单元格中更改值时都会遇到很大的性能损失。

我的titlerForHeaderInSection的当前代码是

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];

int averageScoreTotal, _total;
averageScoreTotal = 0;
_total = 0;

for (BlkCon_BlockToConstructionType *sPC in sectionInfo.objects)
{
    _total = [sPC.compositionPc integerValue];

    averageScoreTotal += _total;
}   

return [NSString stringWithFormat: @"(Total Composition for Group %d)", averageScoreTotal];

}

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:3)

您可以使用UITableView的-reloadSections:...方法和正确的部分。这也将重新加载节标题。

如果您不想使用该方法,因为您的表视图停止滚动片刻或其中一个表视图单元格是第一响应者,您必须使用包含标签的部分的自定义标题视图

1)实施-tableView:heightForHeaderInSection:-tableView:viewForHeaderInSection:

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return tableView.sectionHeaderHeight;
}

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    CGFloat height = [self tableView:tableView heightForHeaderInSection:section];
    NSString *title = [self tableView:tableView titleForHeaderInSection:section];

    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, height)];
    containerView.backgroundColor = tableView.backgroundColor;

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(19, 7, containerView.bounds.size.width - 38, 21)];
    label.backgroundColor = [UIColor clearColor];

    label.font = [UIFont boldSystemFontOfSize:17];
    label.shadowOffset = CGSizeMake(0, 1);
    label.shadowColor = [UIColor whiteColor];

    label.text = title;
    label.textColor = [UIColor colorWithRed:0.265 green:0.294 blue:0.367 alpha:1];

    [containerView addSubview:label];

    return containerView;
}

2)通过更改其text属性直接更新标签。您必须为标签创建iVar或更好地使用数组来存储它们,以便在您想要更新部分标题文本时可以访问它们。

3)如果要使标题高度灵活,请将标签的numberOfLines属性设置为0,使其具有不确定的行,并确保-tableView:heightForHeaderInSection:返回正确的高度。 / p>

为了更新章节标题的高度,请使用

[self.tableView beginUpdates];
[self.tableView endUpdates];
祝你好运,
费边

编辑:
上面的代码假定您使用ARC。