我有一个UITableViewController,其中包含多个部分标题,每个标题都加载相同的UIView。但是,当我在模拟器中运行代码时,只会显示最后一个节头。有没有人知道为什么会出现这种情况。
这是我的SectionHeader方法
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if(section < distinctPicklersHeaderArray.count)
return [self picklerHeaderView];
return nil;
}
提前感谢任何建议。
注意:我发布了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;
}
答案 0 :(得分:2)
我认为这可以减轻你的工作(未经测试,可能包含错别字):
通过将section index添加为参数来改进您的方法:
- (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];
}
答案 1 :(得分:1)
您使用的是实际代码吗?我问,因为它没有意义。
相当于
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if(section < distinctPicklersHeaderArray.count)
return [self picklerHeaderView];
return nil;
}
此外,您似乎得到的是第一个标题,而不是最后一个标题。
因此,您只会获得“足够小”部分的标题。如果这不是您想要的,或者标题太少,请检查数组的内容。
修改强>
picklerHeaderView
每次调用时都返回新实例,还是返回共享实例?您无法共享一个视图实例!