uitableview中的节标题 - reusidentifier?

时间:2010-11-12 11:16:03

标签: iphone uitableview fragment sectionheader

我有一个表格,其中包含各个部分的自定义标题。除此之外,我还实现了折叠功能,以便在触摸标题时,减少所有未处理的部分,并展开已处理的部分。 我意识到通过使用UIButtons作为背景视图。此外,按钮具有不同的颜色和文本,具体取决于它们的状态(扩展与未扩展)。

我有一个问题,类似于reusidentifier问题,即如果你不重用已经分配在表中的单元格,如果你开始滚动,会出现某些片段。在这里它只发生在我的第一部分,然而它看起来支离破碎和重复......

是否有类似于重新使用已分配过的标题视图,如UITableViewCells的方法reusIdentifier?

或者有更好的方法吗?

预先分配按钮以将它们存储在数组中并不能帮助我......

这里有一些代码:

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

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 40)];
[button setShowsTouchWhenHighlighted:NO];
[button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
[button addTarget:self action:@selector(collapse:) forControlEvents:UIControlEventTouchUpInside];
button.tag  = section;

[button setAdjustsImageWhenHighlighted:NO];
button.backgroundColor = [UIColor colorWithRed:63.0f/255.0f  green:154/255.0f blue:201/255.0f alpha:1.0f];


[button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:14.0]];
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
if (section == 0) {
//  [button setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[button setTitle:@"  Newsroom" forState:UIControlStateNormal];
} else {
    [button setTitle:[NSString stringWithFormat:@"    Sektion %d", section] forState:UIControlStateNormal];

}


if (section == mySection) {
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_active.png"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_active.png"] forState:UIControlEventTouchUpInside];
    [button.titleLabel  setTextColor:[UIColor whiteColor]];

} else {
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_inactive.png"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_inactive.png"] forState:UIControlEventTouchUpInside];

    [button.titleLabel  setTextColor:[UIColor colorWithRed:96.0f/255.0f  green:96/255.0f blue:97/255.0f alpha:1.0f]];

}

return [button autorelease];
}

1 个答案:

答案 0 :(得分:0)

我还使用UIButton标题视图实现了折叠节表。我发现它是愚蠢的尝试缓存和重新使用视图,因为你不知道UITableView什么时候完成它们(我崩溃了)。

我建议您通过以下方式实施状态更改:更新数据模型;执行所有行插入/删除以执行折叠/展开;然后执行[tableView reloadData],它将调用viewForHeaderInSection,您可以使用数据模型的状态返回格式正确的uibutton视图。