如何使用反应框架使用数组填充 NSTableview ? 在iOS for UITableview中:
self.viewModel.arrayElements.asObservable()
.observeOn(MainScheduler.instance)
.bind(to: detailsTableView.rx.items(cellIdentifier: "comment", cellType: UITableViewCell.self)){
(row,element,cell) in
cell.addSubview(cellView)
}.addDisposableTo(disposeBag)
如何为 NSTableView
实现相同目标答案 0 :(得分:0)
我遇到了类似的需求,并用BehaviorRelay
(使用RxSwift 5)解决了这个问题。
BehaviorRelay充当中介者,因此可以使用常规的NSTableViewDataSource
和NSTableViewDelegate
协议
重要的部分是self.detailsTableView.reloadData()
语句,该语句告诉tableview重新加载数据,它不会自动触发。
类似这样的东西:
var disposeBag = DisposeBag()
var tableDataRelay = BehaviorRelay(value: [Element]())
func viewDidLoad() {
viewModel.arrayElements.asObservable()
.observeOn(MainScheduler.instance)
.bind(to: tableDataRelay).disposed(by: disposeBag)
tableDataRelay
.observeOn(MainScheduler.instance)
.subscribe({ [weak self] evt in
self.detailsTableView.reloadData()
}).disposed(by: disposeBag)
}
func numberOfRows(in tableView: NSTableView) -> Int {
return tableDataRelay.value.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let element = tableDataRelay.value[row]
let cellView = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: nil) as? NSTableCellView
cellView?.textField?.stringValue = element.comment
return cellView
}
答案 1 :(得分:-1)
尝试下面的内容,你应该使用不可观察的驱动程序
阅读此https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Traits.md
import RxSwift
import RxCocoa
let data = Variable<[String]>([])
let bag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
data.asDriver.drive( tableView.rx.items(cellIdentifier: "idenifier")){(row:Int, comment:String, cell:UITableViewCell) in
cell.title = report
}.disposed(by:bag)
}