tableviewのセクションの指定方法について質問です。
リンク内容
こちらのサイトのようにtableViewをアコーディオン風に作成しようとしています。
そこで質問があるのですが、
アコーディオン風はSection0のヘッダーをタップすると、
section0のcellが開いたり閉じたりすると思います。
同じく、
section1をタップするとsection1のcell、
section2をタップするとsection2のcellが同じように見えたり隠れたりします。
私が試したいのは、
Section0をタップすると、Section0も開くし、Section1も開いたり閉じたり
Section1だけSection0と連動するようにしたいです。
全部そのようにするのではなく、
Sectionが10個あるならば、そのうちのSection0とSection1だけそのようにしたい
ということです。
例えば、
リンクページにございます、
// 折りたたみフラグ var foldingFlg1 = false var foldingFlg2 = false var foldingFlg3 = false // 略 // セルの数を返す。 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // テーブルビューのセル数の設定する。 switch section { case 0: return foldingFlg1 ? 0 : self.items1.count case 1: return foldingFlg2 ? 0 : self.items2.count case 2: return foldingFlg3 ? 0 : self.items3.count default: return 0 } } // 略 @objc func tapHeader(gestureRecognizer: UITapGestureRecognizer) { // タップされたセクションを取得する。 guard let section = gestureRecognizer.view?.tag as Int! else { return } // フラグを設定する。 switch section { case 0: foldingFlg1 = foldingFlg1 ? false : true case 1: foldingFlg2 = foldingFlg2 ? false : true case 2: foldingFlg3 = foldingFlg3 ? false : true default: break } // タップされたセクションを再読込する。 myTableView.reloadSections(NSIndexSet(index: section) as IndexSet, with: .none) }
この部分あると思いますが、
タップしたsectionヘッダーにフラグをつけて、
セルの数を返す"numberOfRowsInSection"でフラグによって、セルの個数を0かアイテム数かで
分岐していると思います。
section0が押されたら、section1も連動させるには
要はsection0のフラグつける部分で、
section1に対応するフラグ(foldingFlg2)も追加してしまえばいいのではないかと考え、
switch section { case 0: foldingFlg1 = foldingFlg1 ? false : true foldingFlg2 = foldingFlg2 ? false : true //追加してみたけど失敗 case 1: ...
このように変更して試しましたが、アプリが落ちてしまいました。
”Thread 1: signal SIGABRT”
どのように改善すれば良いのか、考え方、アプローチの仕方だけでもいいので
ご教示していただけますとありがたいです。
回答1件
あなたの回答
tips
プレビュー