0

我有一个 UITableViewController 有多个部分标题,每个部分都加载相同的 UIView。但是,当我在模拟器中运行代码时,只会出现最后一节标题。有没有人知道为什么会这样。

这是我的 SectionHeader 方法

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if(section < distinctPicklersHeaderArray.count)
    return [self picklerHeaderView];
return nil;
}

在此先感谢您的任何建议。

UITableViewCell 不工作

注意:我发布了 picklerHeaderView 方法。但是,我不确定如何每次都返回一个单独的实例,因为我只是在完成教程。

-(UIView *)picklerHeaderView
{
// if we haven't loaded the headerView...
if(!picklerHeaderView){
    // load the headerview xib file
    [[NSBundle mainBundle] loadNibNamed:@"PicklerDetailsDrillDownHeader" owner:self options:nil];
}
return picklerHeaderView;
}
4

2 回答 2

2

我认为这可以减轻你的工作(未经测试,可能包含拼写错误):

通过添加节索引作为参数来改进您的方法:

- (UIView *)picklerHeaderViewForSectionIndex:(NSInteger)section{

    //Create a view with a label maybe?
    UIView * v = [[UIView alloc]initWithFrame:(CGRectMake (0, 0, 320, 20)];
    UILabel * l = [[UILabel alloc]initWithFrame:(CGRectMake (0, 0, 320, 20)]; 
    //Mofify background colors and text color as you want here
    [l setText:[NSString stringWithFormat:@"%@", section]];
    [v addSubview:l];
    [l release];
    return [v autorelease]
}

并在里面调用它viewForHeaderInSection

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


    return [self picklerHeaderViewForSectionIndex:section];

}

处理 UIView 可能甚至没有必要。尝试覆盖此方法:

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

    return [NSString stringWithFormat:@"%@", section];
}
于 2013-08-25T15:14:29.903 回答
1

您使用的是实际代码吗?我问,因为它真的没有意义。

相当于

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if(section < distinctPicklersHeaderArray.count)
        return [self picklerHeaderView];
    return nil;
}

此外,您似乎得到了第一个标题,而不是最后一个。

因此,您只会获得“足够小”部分的标题。如果这不是您想要的或得到的标题太少,请检查您的数组的内容。

编辑:

每次调用时都picklerHeaderView返回新实例,还是返回共享实例?您不能共享一个视图实例!

于 2013-08-25T14:57:57.827 回答