【问题标题】:How to implement in RXswift and RXCocoa of UITableView Inside of tableview cell?如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?
【发布时间】:2018-08-21 14:13:17
【问题描述】:

我是 RXswift 新手,目前正在从事一个需要 rxswift 和 UITableView 位于 UITableViewCell 内的项目

以下是我到目前为止所做的一些代码,但每次向上/向下滚动时,它都不会显示正确的值

    var disposeBag = DisposeBag()

    viewModel.listExperience.asObservable().bind(to: tableView.rx.items(cellIdentifier: cellExperienceTableViewCell.getCellId(), cellType: ExperienceTableViewCell.self)){
            row , data, cell in

             cell.lblTitle.text = data.title ?? ""
             cell.lblDate.text = data.startDate ?? ""
             cell.lblDetails.text = data.body ?? ""

            let filtered = self.viewModel.getDataCommentInRow(row) /* returns Variable<[Comments]> */
             cell.setCommentTableView(row: row, filtered: filtered)
             cell.tableViewOffset = self.storedOffsets[row] ?? 0
             cell.tableViewComments.reloadData()

           }.disposed(by: disposeBag)

这是我的 tableView 单元格中 tableView 的代码

  func setCommentTableView(row : Int, filtered  : Variable<[ExperienceComment]>){

    tableViewComments.tag = row
    filtered.asObservable().bind(to: tableViewComments.rx.items(cellIdentifier: commentCell.getCellId(), cellType: CommentCell.self)){  indexPath , data, cell in
        cell.lblComment.text = data.body
      }.disposed(by: disposeBag)
}

有谁知道如何做到这一点?谢谢

【问题讨论】:

    标签: rx-swift rx-cocoa


    【解决方案1】:

    我认为您唯一需要做的就是在表格视图单元格中添加一个prepareForReuse 方法。在其中添加disposeBag = DisposeBag()。确保您的 DisposeBag 是单元格内的 var 以便执行此操作。

    如果我是对的,问题是当单元被重用时,它开始从多个filtered observables 中读取,因为它们都绑定到同一个 tableViewComments。

    【讨论】:

    • 谢谢,我忘了在这里添加 disposeBag 的声明,但我在该方法之外声明了一个 disposeBag(一个在我的 TableViewCell 内部,一个在我的 viewController 内部)。 “如果我是对的,问题是当单元格被重用时,它开始从多个过滤后的 observable 中读取,因为它们都绑定到同一个 tableViewComments。”是的,这正是我的 tableviewCell 发生的事情。我会检查“prepareForResue”,谢谢丹尼尔
    • 是的,所以替换 prepareForReuse 中的 disposeBag 会导致它持有的当前绑定结束并为新绑定准备单元格。请记住,关闭 Observable 管道的方法是让生产者完成/出错,或者让消费者处理连接。
    • 谢谢丹尼尔,我添加了我在 tableView 单元格中的 prepareForReuse 中添加了 disposeBag,现在一切正常。 :)
    • 很高兴听到这个消息。请记住,您不是在 prepareForReuse 中“添加”处理袋。相反,您是在更换处置袋(从而删除旧的并处置其中的所有东西。)这就是为什么这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多