RxSwift - 表格视图中的文本字段变量绑定
RxSwift - Textfield-Variable binding in tableview
我是 RxSwift 的新手,我有这段代码来设置一个包含文本字段的表格视图:
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 行都具有相同的值
问题出在element.name
订阅的生命周期。因为绑定到self.disposeBag
,所以在cell重用的时候不会dismiss,但是当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)
我是 RxSwift 的新手,我有这段代码来设置一个包含文本字段的表格视图:
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 行都具有相同的值
问题出在element.name
订阅的生命周期。因为绑定到self.disposeBag
,所以在cell重用的时候不会dismiss,但是当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)