最近、リアクティブプログラミングを使用してSwiftにコードを書き始めました。リアクティブプログラミングは少し混乱する概念ですが、とにかく私はリアクティブプログラミングを使って展開と崩壊の概念を持つテーブルビューを実装したいと思います。私は自分のやり方で試してみましたが、通常のセクションテーブルビューとhereを実装するためのコードを書くことができましたが、それらも例を提供しましたが、expandおよびcollapse tableviewでは何も見つかりませんでした。いずれにしてもこの解決策を提供できますか?Swft3(RxSwift、RxCocoa) - TableViewリアクティブプログラミングを使用した展開と折りたたみの概念
0
A
答えて
0
私はあなたが「combineLatest」に精通していると仮定します。 この答えは本当に「クリーン」ではないですが、何とかそれを実装する方法のアイデアを与えるだろう:あなたは、未知の持っている場合は、私は私の場合には2つのセクションを持っていた
var expansions = [Variable<Bool>].init(repeating: Variable<Bool>(true), count: 2)
:
は、最初の配列を定義しますセクションの数を[Int: Variable<Bool>]
とすると、各セクションがこの辞書にマップされます。
今の拡張を取得するための方法を定義します。
func expansion(for section: Int) -> Variable<Bool> {
/* if using [Int: Variable<Bool>]
if expansions[section] == nil {
expansions[section = Variable<Bool>(false)
}*/
return expansions[section]
}
今Observable.combineLatest
とexpansion(for: _)
とのtableViewデリゲート内を使用して項目をフィルタ:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// next line just dequeues a UITableViewHeaderFooterView subclass.
let view = tableView.dequeueReusableHeaderFooter(forSection: section) as ExpandableHeader
view.titleLabel.text = dataSource[section].model.title
view.isExpanded = expansions[section].value // just a variable to update header's UI
view.expandButton.rx.controlEvent(.touchUpInside)
.bind { [weak self, weak view = view] in
guard let strongSelf = self else { return }
strongSelf.expansions[section].value = !strongSelf.expansions[section].value
view?.isExpanded = strongSelf.expansions[section].value // because dataSource will not reload this view itself unless it gets dequeued.
}
.disposed(by: view.disposeBag)
return view
}
お知らせ
Iこのサブスクリプションをと処分しています私はこのviewControllerで使用しているものではありません。 view.disposeBag
は毎回prepareForReuse()
で更新され、以前のすべての加入者が削除されるためです。 (そのようなメソッドを使用しないで、メモリリークを引き起こすことはありませんが、ViewControllerは多くのリソースともちろん不要な動作を消費します)
関連する問題
- 1. (スウィフト)展開と折りたたみテーブルビューセルタップ
- 2. WPFエクスパンダの展開/折りたたみ
- 3. jQueryヘッダーで展開/折りたたみ
- 4. WPF DataBoundツリービュー展開/折りたたみ
- 5. Android:AppCompatライブラリなしのツールバーの展開と折りたたみ
- 6. アドバイス/ブレーンストーンの書き直しと展開/折りたたみボックス
- 7. 角度素材を使用して折りたたみリストアイテムを展開する
- 8. c#winform:node TreeViewで展開と折りたたみを行う
- 9. Telerik RadTreeViewとクライアント側の展開/折りたたみ
- 10. SSRS 2008 - サブレポートの展開と折りたたみ
- 11. SplitContainerパネルの折りたたみと展開
- 12. ノックアウトテーブル/サブテーブルの展開/折りたたみボタンの切り替え
- 13. CollapsiblePaneはマウスでは展開/折りたたみしません。
- 14. Navbar折りたたみボタンは展開しません
- 15. CSS3トランジションの展開/折りたたみを追加する
- 16. チェックボックスがスタックパネルの展開/折りたたみアニメーションをトリガー
- 17. 折りたたみを展開するページの検索/検索
- 18. キャプションレイヤーでJQuery jQGridの展開/折りたたみグリッドをクリック
- 19. Jqueryのトグル - 複数のdivでの展開/折りたたみ
- 20. html javascriptの折りたたみ/展開テーブルの行、子の行
- 21. jsTreeノードは展開/折りたたみを行いません。
- 22. ag-grid - ツリーデータの展開/折りたたみ
- 23. GtkTreeViewは、キー押下イベントの展開/折りたたみ
- 24. ヒットテストTTreviewプラス/マイナス(折りたたみ/展開)アイコン - Delphi
- 25. Materialize CSS折りたたみが展開されない
- 26. Jqueryの展開と折りたたみメニューが機能しない
- 27. JSF1を使用してレコードビューを展開/折りたたむ - tomahawkの実装
- 28. 別の要素を展開すると要素を折りたたみます。
- 29. 展開と折りたたみの通知を実装するandroid
- 30. 行の展開と折りたたみオプションを使用してテーブルビューに最適なアプローチ
表示するコードはありますか? – user934902