Вопрос:

Rxswift Обновить значение ячейки Tableview

ios rx-swift rx-cocoa

2759 просмотра

1 ответ

3229 Репутация автора

Я могу связать наблюдаемую последовательность данных с таблицей. Теперь допустим, что у меня есть кнопка в каждой ячейке, которая при клике меняет метку этой ячейки на новое значение. Как это сделать?

Я сделал так далеко

Я создал @IBActionдля этой кнопки в классе наведения ячейки

тогда я делаю

label.text = "new text"

но когда я прокручиваю вниз, затем прокручиваю вверх, метка показывает предыдущее значение, а не новое значение

ранее, когда я использую массив и устанавливаю каждое значение в ячейку, которую я использовал для обновления этого элемента массива и вызывал tableview.reloadData.

Как я могу сделать это в RxSwift?

Я сделал до сих пор

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

Это не кажется мне правильным способом. так что является подходящим способом справиться с этим ??

Автор: LynAs Источник Размещён: 03.03.2017 04:01

Ответы (1)


1 плюс

3229 Репутация автора

Решение

Я могу добиться этого с помощью 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) за указание мне путь

Автор: LynAs Размещён: 04.03.2017 09:40
Вопросы из категории :
32x32