2

我想显示一个带有自定义标题标题的表格。table view附加到controller class实现tableview delegate和数据源协议但不是子类的,因为UIViewController表是要显示在另一个表视图上方的子视图。

我的代码的一些片段: tableview 是以编程方式创建的:

    _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;
    }
}

可悲的是,tableview 没有显示任何节标题,就像我会返回 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

我似乎找到了解决方案:

我为要显示的每个标题视图创建了一个延迟加载强属性。(幸好只有三个)

现在显示视图。

似乎在呈现表之前,标题视图在没有强引用的情况下被释放。

是否存在与实现表视图委托和数据源协议的类的连接不是 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 回答