【问题标题】:RxSwift - Textfield-Variable binding in tableviewRxSwift - 表格视图中的文本字段变量绑定
【发布时间】:2017-01-14 10:12:26
【问题描述】:

我是 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 行都具有相同的值

【问题讨论】:

    标签: ios swift uitableview rx-swift rx-cocoa


    【解决方案1】:

    问题在于订阅element.name 的生命周期。因为是绑定self.disposeBag,所以在cell被复用的时候不会dismiss,而是self的时候被dismiss。

    您可能希望在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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多