0

Interface Builderを使用してXIBにレイアウトすることで、セクションヘッダーを完全に制御したいと思っています。

以下のコードを使用していますが、アプリを実行してもtitleLabel.textが変更されません。各セクションヘッダーのデフォルトの「ラベル」テキストが引き続き表示されます。headerTextの値をNSLogしましたが、適切な文字列が含まれています。

何か案は?ありがとうございました

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{

    CustomSectionHeaderViewController *cshvc = [[CustomSectionHeaderViewController alloc] initWithNibName:@"CustomSectionHeaderViewController" bundle:nil]; 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];

    NSString *headerText = [NSString stringWithFormat:@"%@", [sectionInfo name]];

    cshvc.titleLabel.text = headerText;

    return cshvc.view;
}

回答で更新:Tammoの回答を読んだ後、これがどのように機能するようになったのか

CustomSectionHeader *cshv = [[[NSBundle mainBundle] loadNibNamed:@"CustomSectionHeader" owner:self options:nil]objectAtIndex:0];

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

NSString *headerText = [NSString stringWithFormat:@"%@", [sectionInfo name]];

cshv.textLabel.text = headerText;


return cshv;
4

1 に答える 1

1

免責事項: そのようなビューのコントローラーを持つことは正しいことだとは思いません。

コードの問題は、コントローラーが必要な場合にのみビューをロードすることです。titleLabel にアクセスするとき、ビューはまだロードされていないため、titleLabel は nil です。試す

NSString *headerText = [NSString stringWithFormat:@"%@", [sectionInfo name]];

// Make sure that the view is loaded
UIView *result = [cshvc view];

cshvc.titleLabel.text = headerText;

return result;
于 2012-06-13T13:11:10.160 に答える