Rxswift 更新 Tableview 单元格值
Posted
技术标签:
【中文标题】Rxswift 更新 Tableview 单元格值【英文标题】:Rxswift Update Tableview cell value 【发布时间】:2017-03-03 04:01:50 【问题描述】:我能够将 Observable 数据序列绑定到表。 现在假设我在每个单元格上都有一个按钮,单击该按钮会更改 该单元格的标签为新值。如何做到这一点?
到目前为止,我已经做了如下
我在单元格指针类中为该按钮创建了一个@IBAction
那我在做
label.text = "new text"
但是当我向下滚动然后向上滚动时,标签显示以前的值而不是新值
以前当我使用数组并将每个值设置为一个单元格时,我用于更新该数组项并调用tableview.reloadData
。
我如何在 RxSwift 中做到这一点??
到目前为止我已经完成了
tableview.dataSource = nil (then)
myData.bindTo ... (bind again)
在我看来,这不是正确的方法。那么处理这个问题的适当方法是什么??
【问题讨论】:
【参考方案1】:我可以通过 RxSwiftCommunity Action 实现这一目标
https://github.com/RxSwiftCommunity/Action
视图控制器
variable.asObservable().bindTo(mytable.rx.items(cellIdentifier: "cell")) (row, person, cell) in
if let cellToUse = cell as? TableViewCell
cellToUse.person = Variable(person)
cellToUse.button1.rx.action = cellToUse.action
.addDisposableTo(disposeBag)
在单元格中
class TableViewCell: UITableViewCell
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var button1: UIButton!
let disposeBag = DisposeBag()
let action = CocoaAction input in
return .just(input)
var person : Variable<Person>!
didSet
self.updateUI()
private func updateUI()
person.asObservable()
.subscribe(onNext:
person in
let name : Observable<String> = Observable.of(person.name)
let age : Observable<String> = Observable.of("\(person.age)")
_ = name.bindTo(self.label1.rx.text)
_ = age.bindTo(self.label2.rx.text)
).addDisposableTo(disposeBag)
action.elements
.asObservable()
.subscribe(onNext:
_ in
self.label2.text = "asd"
).addDisposableTo(disposeBag)
像以前一样不确定这是否是正确的方法,但它对我有用
感谢 (https://rxswift.slack.com/messages/@fpillet
) 为我指路
【讨论】:
我认为您不应该在每次设置person
时都调用self.updateUI()
。每次调用它都会创建一个新的绑定。您应该设置一次此绑定。或者直接在 didSet 中使用更新名称和年龄,根本不使用任何绑定。以上是关于Rxswift 更新 Tableview 单元格值的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift Observeable 不会在数据更改时更新 tableview
无法将 Tableview 单元格值添加到 JSON 参数,为啥会为零?迅速
如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?