セクションのヘッダーをカスタマイズしたテーブルがあります。それに加えて、ヘッダーをタッチすると、アドレス指定されていないセクションがすべて縮小され、アドレス指定されたセクションが展開されるように、折りたたみ機能を実装しました。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];
}