问题:银行名和银行卡号不同参数,提交到后台却是同一个。
实现:银行名是选择的,银行号是输入的,都使用了RX实现输入框和Model双向绑定的。
分析:这个功能开发并投入使用好几年了,怎么最近才发现有BUG,从提交的数据来看是今年10月之后,那应该是iOS 15之发布之后,针对tableview添加了sectionHeaderTopPadding等改动导致以前一屏能显示下的,现在可以滚动到屏幕外了。
测试:当直接选择银行名称或输入银行卡号并不会发生值的混淆,但当我们把两个cell滑动到屏幕外,再拉回显示的时候2个输入框变成了同一个值的混淆。
猜测:cell的复用造成了这个问题。
一番搜索后找到了rx tableview textfield 正确用法,使用后解决了此问题。
cell 中代码段。
class ExpenseInputCell: UITableViewCell {
// ..
var disposeBag = DisposeBag()
override func prepareForReuse() {
self.diposeBag = DisposeBag()
}
}
contoller中代码段。
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)
cell中是必须要的,contoller中最重要的.addDisposableTo(cell.disposeBag),如果使用了contoller中定义的disposeBag,就会遇到和我一样的问题。
网友评论