gpt4 book ai didi

ios - RxSwift,如何在不使用 RxDataSourced 的情况下绘制 tableView?

转载 作者:行者123 更新时间:2023-11-28 15:06:51 25 4
gpt4 key购买 nike

我不知道如何做你的数据源。我看了关于 RxSwift 和 RxCocoa 的类(class),意识到对于复杂的表格你需要使用你的数据源。找到了一个库 RxDataSourced 但我们不允许使用它。决定编写自己的数据源,但什么也没发生。如果您不介意,您可以展示编写 dataSourse 在 Internet 上找不到任何内容的示例。

class RXSpecificationsDataSource: NSObject, RxTableViewDataSourceType, UITableViewDataSource {
typealias Element = MaterialEntityRootGroupProperty

var _sectionModels: [MaterialEntityRootGroupProperty] = []


public typealias ConfigureCell = (RXSpecificationsDataSource, UITableView, IndexPath) -> UITableViewCell



func tableView(_ tableView: UITableView, observedEvent: Event<RXSpecificationsDataSource.Element>) { }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard _sectionModels.count > section else { return 0 }
return _sectionModels[section].properties.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
precondition(indexPath.item < _sectionModels[indexPath.section].properties.count) return ConfigureCell(self, tableView, indexPath, self[indexPath])

}

func numberOfSections(in tableView: UITableView) -> Int {
return _sectionModels.count
}
}

final class MaterialDetailSpecificationsView: UserInterface {

private var specificationTableView: UITableView!
private let disposeBag = DisposeBag()

func setupView(items: Variable<[MaterialEntityRootGroupProperty]>) {
setNabigationParms()
drawTableViewSpecifications()

let dataSource = RXSpecificationsDataSource ()

dataSource.configureCell = { (dataSource, tv, indexPath, element) in
let cell = tv.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = "\(element) @ row \(indexPath.row)"
return cell
}

items.asObservable()
.bind(to: specificationTableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)



}

最佳答案

您不需要 RxDataSources 只是为了将流绑定(bind)到表。 RxCocoa 中已经内置了 UITableView 和 UICollectionView 的绑定(bind),你可以在这里看到更多信息:

实际上,在 RxDataSources 存储库中有一个示例,说明如何在没有 RxDataSources 的情况下执行此操作 ;-)

let data = Observable<[String]>.just(["first element", "second element", "third element"])

data.bind(to: tableView.rx.items(cellIdentifier: "Cell")) { index, model, cell in
cell.textLabel?.text = model
}
.disposed(by: disposeBag)

https://github.com/RxSwiftCommunity/RxDataSources#why

关于ios - RxSwift,如何在不使用 RxDataSourced 的情况下绘制 tableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com