美文网首页
iOS 15 RxSwift Tableview 记录一次BUG

iOS 15 RxSwift Tableview 记录一次BUG

作者: 東玖零 | 来源:发表于2021-11-11 10:52 被阅读0次

    问题:银行名和银行卡号不同参数,提交到后台却是同一个。

    实现:银行名是选择的,银行号是输入的,都使用了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,就会遇到和我一样的问题。

    原文 :RxSwift - Textfield-Variable binding in tableview

    相关文章

      网友评论

          本文标题:iOS 15 RxSwift Tableview 记录一次BUG

          本文链接:https://www.haomeiwen.com/subject/tobbzltx.html