2

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

1 に答える 1

0

また、UIButton ヘッダー ビューを使用して折りたたみセクション テーブルを実装しました。私が見つけたのは、ビューをキャッシュして再利用しようとするのはばかげているということでした.UITableViewがいつそれらで完了したのかわからないためです(クラッシュしました)。

次の方法で状態の変更を実装することをお勧めします。データ モデルを更新します。すべての行の挿入/削除を実行して、折りたたみ/展開を実行します。次に、[tableView reloadData] を実行します。これにより、viewForHeaderInSection が呼び出され、データ モデルの状態を使用して、適切にフォーマットされた uibutton ビューが返されます。

于 2012-01-24T12:21:41.730 に答える