2016-10-26 6 views
0

最近、リアクティブプログラミングを使用してSwiftにコードを書き始めました。リアクティブプログラミングは少し混乱する概念ですが、とにかく私はリアクティブプログラミングを使って展開と崩壊の概念を持つテーブルビューを実装したいと思います。私は自分のやり方で試してみましたが、通常のセクションテーブルビューとhereを実装するためのコードを書くことができましたが、それらも例を提供しましたが、expandおよびcollapse tableviewでは何も見つかりませんでした。いずれにしてもこの解決策を提供できますか?Swft3(RxSwift、RxCocoa) - TableViewリアクティブプログラミングを使用した展開と折りたたみの概念

+0

表示するコードはありますか? – user934902

答えて

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.combineLatestexpansion(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は多くのリソースともちろん不要な動作を消費します)

関連する問題