UITableView
表示する必要があるセクションを拡張したいと思いUITableViewCells
ます。これを達成するにはどうすればよいですか?
9213 次
2 に答える
6
- 簡単な実装では、セクションのセルの高さをゼロに保ちます。
- viewForSectionHeaderをタッチ可能にする
- 触れるときは、セクションの下のセルに適切な高さを設定します
- セクションを切り替えるためのロジックを作成する
また、
- セクションヘッダーに触れると、触れたセクションの更新された行数でテーブルをリロードします。
それを行う他の多くの方法。Appleの例。
于 2012-04-18T06:51:29.017 に答える
0
Vignesh の回答によると、私は 2 番目の解決策を試しました。
最初に、各セクションの isExpanded タグを格納する配列を宣言します。初期値はすべて BOOL NO です。すべてのセクション行が折りたたまれていることを意味します。
次に、
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
カスタム セルをセクション ヘッダー ビューとして使用するためです。これが「セル」です。独自のビューを使用できます。
cell.tag=section;
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sectionTapped:)];
[cell addGestureRecognizer:recognizer];
cell.userInteractionEnabled=YES;
そして、sectionHeader がタップされたときに何かをします。
- (void)sectionTapped:(UITapGestureRecognizer *)recognizer
{
NSMutableArray *isSectionTouched=[[NSMutableArray alloc]initWithCapacity:_sectionExpandBool.count];
isSectionTouched=[_sectionExpandBool mutableCopy];
if ([[isSectionTouched objectAtIndex:recognizer.view.tag]boolValue]==YES) {
[isSectionTouched replaceObjectAtIndex:recognizer.view.tag withObject:[NSNumber numberWithBool:NO]];
}else if ([[isSectionTouched objectAtIndex:recognizer.view.tag]boolValue]==NO){
[isSectionTouched replaceObjectAtIndex:recognizer.view.tag withObject:[NSNumber numberWithBool:YES]];
}
_sectionExpandBool=isSectionTouched;
[self.tableView reloadData];
}
numberOfRowsInSection メソッドを変更することを忘れないでください。row.count は _sectionExpandBool の値に従って変更する必要があります。セクションの ExpandBool が YES の場合は、データソースの正しい数を返し、それ以外の場合は 0 を返します。
それは私の期待どおりに機能します。ただし、ヘッダーをタップするたびにテーブルビュー全体が再度リロードされるため、メモリリークか何かが少し心配です。
特定のセクションのみをリロードするための解決策があるのだろうか。ありがとう。
于 2013-04-28T07:52:18.737 に答える