2

UITableView表示する必要があるセクションを拡張したいと思いUITableViewCellsます。これを達成するにはどうすればよいですか?

4

2 に答える 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 に答える