1. ホーム
  2. ios

[解決済み] iOSのUITableViewのセクションの展開と折りたたみ

2022-09-12 18:36:33

質問

だれか教えてください。 UITableView で展開/折りたたみ可能なアニメーションを行う方法を教えてください。 sectionsUITableView を以下のように変更しますか?

または

どのように解決するのですか?

独自のヘッダー行を作成し、それを各セクションの最初の行として配置する必要があります。サブクラス化した UITableView や既にあるヘッダーをサブクラス化するのは面倒でしょう。今のやり方では、簡単にアクションを起こせるとは思えません。ヘッダーのように見えるセルを設定して tableView:didSelectRowAtIndexPath を設定して、手動でそのセクションを展開または折りたたむことができます。

私なら、各セクションの "expended" 値に対応するブーリアンの配列を保存します。そうすれば tableView:didSelectRowAtIndexPath でこの値をトグルして、特定のセクションをリロードします。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        ///it's the first row of any section so it would be your custom section header

        ///put in your code to toggle your boolean value here
        mybooleans[indexPath.section] = !mybooleans[indexPath.section];

        ///reload this section
        [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
    }
}

次に numberOfRowsInSection をチェックするために mybooleans の値をチェックし、セクションが展開されていない場合は1を、展開されている場合は1+セクション内のアイテム数を返します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (mybooleans[section]) {
        ///we want the number of people plus the header cell
        return [self numberOfPeopleInGroup:section] + 1;
    } else {
        ///we just want the header cell
        return 1;
    }
}

また cellForRowAtIndexPath を更新して、任意のセクションの最初の行のためのカスタムヘッダーセルを返すようにします。