2017-01-14 41 views
0

结合我是新来RxSwift,我有这样的代码来设置,其中包含一个文本框一个实现代码如下:直到行被删除RxSwift - 文本字段变量中的tableview

budget.expenses.asObservable() 
    .bindTo(tableView.rx.items(cellIdentifier: ExpenseInputCell.cellIdentifier, cellType: ExpenseInputCell.self)){(row, element, cell) in 

    cell.name.text = element.name.value 
    cell.name.rx.text 
    .bindTo(element.name) 
    .addDisposableTo(self.disposeBag) 
} 
.addDisposableTo(disposeBag) 

tableView.rx.itemDeleted 
    .subscribe(onNext: {indexPath in 
    self.budget.expenses.value.remove(at: indexPath.row) 
    }) 
    .addDisposableTo(disposeBag) 

一切工作正常,因为那样的话文本字段与数组中正确对象的绑定已混淆。例如,假设我在tableview中有7个项目,并删除了第5行,新的第5和第6行都具有相同的值

回答

4

问题在于订阅的生命周期为element.name。因为它被绑定到self.disposeBag,所以当细胞被重新使用时,当self时它不会被解雇。

您可能想要在ExpenseInputCell上公开一个新的处置袋并在单元的prepareForReuse方法中更新它。

class ExpenseInputCell: UITableViewCell { 
    // .. 

    var disposeBag = DisposeBag() 

    override func prepareForReuse() { 
    self.diposeBag = DisposeBag() 
    } 
} 

和在视图控制器

budget.expenses.asObservable() 
    .bindTo(tableView.rx.items(cellIdentifier: ExpenseInputCell.cellIdentifier, cellType: ExpenseInputCell.self)){(row, element, cell) in 

    cell.name.text = element.name.value 
    cell.name.rx.text 
    .bindTo(element.name) 
    .addDisposableTo(cell.disposeBag) 
} 
.addDisposableTo(disposeBag) 
相关问题