1

こんにちは、誰かが助けてくれることを願っています。

現在、一連のセクションを持つテーブルビューがあります。私の titleForHeaderInSection では、セクション ヘッダーに表示するセクション セルに含まれる値の合計を含む文字列を返しています。これは問題ありませんが、セルの値を更新するときに、titleForHeaderInSection で値の合計を更新して更新する必要があります。現時点では、ユーザーはヘッダーを見えないようにスクロールしてから、ヘッダーをリフレッシュするために元に戻す必要があります。ヘッダーのビューにラベルを含めることを提案するいくつかの例を見て解決策を見つけることができるかどうかをグーグルで調べてきましたが、セクションを動的にする必要があるため、各セクションのラベルを作成できません。reloadsection も使用してみましたが、これも適切に機能せず、テーブルビューのセルで値が変更されるたびにテーブルビューのリロードデータを実行すると、パフォーマンスが大幅に低下します。

私の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];

}

助けてくれてありがとう

4

1 に答える 1

3

UITableViewの-reloadSections:...メソッドを正しいセクションで使用できます。これにより、セクションヘッダーも再読み込みされます。

この方法を使用したくない場合は、テーブルビューのスクロールが一時的に停止するか、テーブルビューセルの1つがファーストレスポンダーであるため、ラベルを含むセクションにカスタムヘッダービューを使用する必要があります。

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:戻り値が正しい高さを返すようにします。

セクションヘッダーの高さを更新するには、

[self.tableView beginUpdates];
[self.tableView endUpdates];

頑張って、
ファビアン

編集:
上記のコードは、ARCを使用していることを前提としています。

于 2012-08-17T16:23:38.517 に答える