我尝试使用DZNEmptyDataSet设置空数据集,而我的tableview绑定到Rx变量
let Chats = Variable(Section).
Chats.asObservable()
.bind(to: tableView.rx.items(dataSource: dataSource))
我的dzn代码如下:
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)
}
问题是,即使Chats为空,tableview的空dataSet也不会显示。如果我删除绑定功能,它会显示。我想知道是否有人能够让两者共存?
答案 0 :(得分:1)
我遇到了一个问题,即如果最后一项被删除,则DZNEmptyDataSet
不会重新出现。我能够通过继承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
}
}
}
然后返回DZNEmptyDataSetDelegate
func emptyDataSetShouldDisplay(_ scrollView: UIScrollView!) -> Bool {
return dataSource.isEmpty
}
最初,在委托方法中,我返回了number of rows for section 0
。原始DataSource
发送已删除事件与tableView注册更改之间的延迟在调用tableView.reloadEmptyDataSet()
时将数字保持在零以上。
现在自动调用它,并给出正确的shouldDisplay值。
答案 1 :(得分:0)
我将RxSwift
与DZNEmptyDataSet
混合在一起,很好。
请尝试以下代码:
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)
您必须使用适当的 cell 自定义您的实现,当然还要为 arrayVariable 分配一些实际数据。