2

カスタム ヘッダー タイトルを含むテーブルを表示したいと考えています。はおよび データ ソース プロトコルを実装する にtable view添付されますが、テーブルは別のテーブルビューの上に表示されるサブビューであるため、 のサブクラスではありません。controller classtableview delegateUIViewController

私のコードのいくつかのスニペット:テーブルビューはプログラムで作成されます:

    _myListView = [[UITableView alloc] initWithFrame:tableFrame style:UITableViewStyleGrouped];

[_myListView setDataSource:self.myListController];
[_myListView setDelegate:self.myListController];
[_myListView setBackgroundColor:darkBackgroundColor];

ここで、myListController はクラスの強力なプロパティです。

セクションの行数:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    …
    return count;    
}

セクション数:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [someDelegate sectionCount];
}

カスタム ヘッダー ビューの場合:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView* headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, SectionHeaderHeight)];
    UILabel* sectionHeaderTitle = [[UILabel alloc] initWithFrame:CGRectMake(20, 3, 300, 24)];

    [headerView setBackgroundColor:[UIColor clearColor]];

    sectionHeaderTitle.text = [self myTitleForHeaderInSection:section];
    sectionHeaderTitle.textColor = [UIColor whiteColor];
    sectionHeaderTitle.textAlignment = UITextAlignmentLeft;

   [headerView addSubview:sectionHeaderTitle];

    return headerView;
}

カスタム headerViewHeight の場合 (iOS5 以降で必要):

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if ( [self tableView:tableView numberOfRowsInSection:section] > 0) {
        return SectionHeaderHeight;
    } else {
        return 0;
    }
}

残念ながら、nil を返す場合と同様に、テーブルビューにはセクション ヘッダーが表示されません。ただし、コードが実際に UIView を返すことをブレークポイントで確認しました。

他のすべては正常に動作します。

私は何が欠けていますか?どうぞ、遠慮なく私を恥じさせてください。

4

4 に答える 4

1

「標準」ビューではなくカスタムビューを使用する理由がよくわかりません。理由があるかもしれませんが、コードには理由がわかりません:)

私は個人的にこれを使用します:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if (section == 0) return @"First section header title";
    if (section == 1) return @"Second section header title";
    else return nil;
}

それがあなたが探しているものではない場合は教えてください!

于 2012-08-23T09:13:13.093 に答える
0

テキストの色を黒色に変更して、一度確認します。

sectionHeaderTitle.textColor = [UIColor blackColor];

于 2012-08-23T09:25:25.910 に答える
0

私は解決策を見つけたようです:

表示するヘッダー ビューごとに、遅延読み込みの強力なプロパティを作成しました。(幸いなことに、3つしかありません)

ビューが表示されるようになりました。

テーブルがレンダリングされる前に、強力な参照なしでヘッダー ビューの割り当てが解除されたようです。

テーブル ビュー デリゲートを実装するクラスへの接続があり、データ ソース プロトコルが UIViewController ではない可能性がありますか?

于 2012-08-23T13:22:22.670 に答える
0

あなたは私の側でこのコードを試してみてください:-)

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 24)];

    UIImage *myImage = [UIImage imageNamed:@"SectionBackGround.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:myImage];
    imageView.frame = CGRectMake(0,0,320,24);

    UIImage *imageIcon = [UIImage imageNamed:@"SectionBackGround.png"];
    UIImageView *iconView = [[UIImageView alloc] initWithImage:myImage];
    iconView.frame = CGRectMake(0,0,320,24);

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 24)];
    label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:14];


    [view addSubview:imageView];
    [view addSubview:iconView];
    [view addSubview:label];
    return view;

}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 24;
}
于 2013-05-22T08:31:47.260 に答える