我有一个表格,其中包含各个部分的自定义标题。除此之外,我还实现了折叠功能,以便在触摸标题时,减少所有未处理的部分,并展开已处理的部分。 我意识到通过使用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];
}
答案 0 :(得分:0)
我还使用UIButton标题视图实现了折叠节表。我发现它是愚蠢的尝试缓存和重新使用视图,因为你不知道UITableView什么时候完成它们(我崩溃了)。
我建议您通过以下方式实施状态更改:更新数据模型;执行所有行插入/删除以执行折叠/展开;然后执行[tableView reloadData],它将调用viewForHeaderInSection,您可以使用数据模型的状态返回格式正确的uibutton视图。