Rxswift更新Tableview单元格值

时间:2017-03-03 04:01:51

标签: ios rx-swift rx-cocoa

我能够将Observable数据序列绑定到表中。 现在假设我在每个单元格上都有一个按钮,点击后会改变 该单元格的标签为新值。怎么做?

我到目前为止已经完成了

我已在单元格指向类

中为该按钮创建了@IBAction

然后我在做

label.text = "new text"

但是当我向下滚动然后向上滚动时,标签会显示上一个值而不是新值

之前当我使用数组并将每个值设置为用于更新该数组项并调用tableview.reloadData的单元格时。

我怎么能在RxSwift中做到这一点?

到目前为止我已经完成了

tableview.dataSource = nil (then)
myData.bindTo ... (bind again)

这在我看来并不正确。那么处理这个问题的适当方法是什么?

1 个答案:

答案 0 :(得分:1)

我能够通过RxSwiftCommunity Action

实现这个目标

https://github.com/RxSwiftCommunity/Action

的ViewController

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)向我展示了

的方式