2017-04-26 4 views
1

私は私のテーブルビューは、Rxの変数DZNEmptyDataSetはRxSwiftのテーブルビューバインディングと互換性がありません。誰でもそれを動作させることができましたか?

let Chats = Variable(Section). 

Chats.asObservable() 

    .bind(to: tableView.rx.items(dataSource: dataSource)) 

にバインドされており、次のように私のDZNコードがある一方でDZNEmptyDataSetで空のデータセットを設定しようとしている:

tableView.emptyDataSetSource = self 
tableView.emptyDataSetDelegate = self 


func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { 
    let str = "Welcome" 
    let attrs = [NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)] 
    return NSAttributedString(string: str, attributes: attrs) 
} 

func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { 
    let str = "Tap the button below to add your first grokkleglob." 
    let attrs = [NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)] 
    return NSAttributedString(string: str, attributes: attrs) 
} 

問題でも、ありますチャットが空の場合、テーブルビューの空のデータセットは表示されません。私がバインド機能を削除すると、それが表示されます。私は誰もが共存させることができたのだろうかと思っていたのですか?

答えて

1

最後のアイテムが削除された場合、DZNEmptyDataSetが再表示されないという問題が発生しました。私はそれが私がnumber of rows for section 0を返していましたデリゲートメソッドでは、もともとDZNEmptyDataSetDelegate

func emptyDataSetShouldDisplay(_ scrollView: UIScrollView!) -> Bool { 
    return dataSource.isEmpty 
} 

にdataSource.isEmptyプロパティを返す次にRxTableViewSectionedAnimatedDataSource

final class MyRxTableViewSectionedAnimatedDataSource<S: AnimatableSectionModelType>: RxTableViewSectionedAnimatedDataSource<S> { 

private var currentItemsCount = 0 

var isEmpty: Bool { 
    return currentItemsCount == 0 
} 

override func tableView(_ tableView: UITableView, observedEvent: Event<[S]>) { 
    super.tableView(tableView, observedEvent: observedEvent) 
    switch observedEvent { 
    case let .next(events): 
     guard let lastEvent = events.last else { return } 
     currentItemsCount = lastEvent.items.count 
    default: break 
    } 
    } 
} 

をサブクラス化することで作業を取得することができました。元のDataSourceが削除されたイベントを送信したときと、tableViewが変更を登録したときの間の遅延は、tableView.reloadEmptyDataSet()が呼び出されたときにゼロより上の数を保持しました。

これは自動的に呼び出され、適切なshouldDisplay値が与えられます。

0

RxSwiftDZNEmptyDataSetと混ぜても問題ありません。以下 てみてくださいコード:

let arrayVariable = Variable([]) 

arrayVariable 
    .asObservable() 
    .bindTo(newsTableView.rx.items) { tableView, row, item in 
     let cell = tableView.dequeueReusableCell(withIdentifier: "myCellIdentifier", for: IndexPath(row: row, section: 0)) 
     return cell 
    } 
    .addDisposableTo(disposeBag) 

あなたが適切なセルであなたの実装をカスタマイズし、もちろんarrayVariableにいくつかの実際のデータを割り当てる必要があります。

+0

ええ、rxdatasourceにテーブルをバインドするときはうまくいきませんでした。私はそのrxdatasourceと互換性がないと思います。空になっているかどうかでテーブルにオブザーバブルを置かなければならず、それがrefreshemptydatasetを呼び出すならば。 – Ryan

関連する問題