如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?

     2023-03-10     206

关键词:

【中文标题】如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?【英文标题】:How to implement in RXswift and RXCocoa of UITableView Inside of tableview cell? 【发布时间】: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)

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

使用 RxSwift 在 UITableView 中进行 2 路绑定

】使用RxSwift在UITableView中进行2路绑定【英文标题】:2waybindinginUITableViewusingRxSwift【发布时间】:2019-02-0907:43:54【问题描述】:我正在使用带有RxSwift、RxCocoa、RxDataSources的MVVM模式。我已经使用RxDataSource成功地用ListViewModel中的Palett... 查看详情

RxSwift、RxCocoa 和 UITableview

】RxSwift、RxCocoa和UITableview【英文标题】:RxSwift,RxCocoaandUITableview【发布时间】:2017-09-1315:45:00【问题描述】:我在使用RxSwift实现UITableView时遇到问题。我尝试使用以下代码将模型数组的observable绑定到表项。models.bind(to:self.tableView... 查看详情

使用 RxSwift 异步加载 UITableView 单元格

】使用RxSwift异步加载UITableView单元格【英文标题】:AsyncloadingofUITableViewcellswithRxSwift【发布时间】:2017-04-0308:33:25【问题描述】:我正在尝试在我的应用程序中利用RxSwift。其中一个用例是由搜索按钮(或单元格的回收)触发的图... 查看详情

在 RxSwift 中测试 UITableView.rx.itemSelected 回调

】在RxSwift中测试UITableView.rx.itemSelected回调【英文标题】:TestingUITableView.rx.itemSelectedcallbackinRxSwift【发布时间】:2018-05-0721:03:42【问题描述】:我有一个绑定到实例varmyStrings:BehaviorRelay&lt;[String]&gt;的tableView,这样tableView中每... 查看详情

RxSwift + UITableViewCell 如何在 heightForRowAt 中获取单元格对象

】RxSwift+UITableViewCell如何在heightForRowAt中获取单元格对象【英文标题】:RxSwift+UITableViewCellhowtogetcellobjectinheightForRowAt【发布时间】:2017-03-2510:49:47【问题描述】:我有一个带有UITableView的视图控制器。使用RxSwift填充表数据:letobser... 查看详情

RXSwift 平面地图

...平面映射两者请求?这是我的代码:functableView(_tableView:UITableView,di 查看详情

处理 UITableView 绑定中的连接错误(Moya、RxSwift、RxCocoa)

】处理UITableView绑定中的连接错误(Moya、RxSwift、RxCocoa)【英文标题】:HandleConnectionErrorinUITableViewBinding(Moya,RxSwift,RxCocoa)【发布时间】:2018-11-1813:01:44【问题描述】:我正在使用RxCoCoa和RxSwift进行UITableViewBiding。问题是当连接丢失... 查看详情

无法使用 RxSwift 变量 asObservable() 设置绑定(到:UITableView)

】无法使用RxSwift变量asObservable()设置绑定(到:UITableView)【英文标题】:Cannotsetbind(to:UITableView)withRxSwiftVariableasObservable()【发布时间】:2017-09-0912:05:44【问题描述】:我正在尝试绑定(到:)一个collectionView,但tableView也不起作用... 查看详情

rxswift使用小记

...而是一种可用可不用的态度。一般APP用的最多的控件就是UITableview,RxCocoa里有对UITableview的封装,但是有个限制,就是,所有的cell所绑定的model必须是同一个类型。也就是说,如果我的这个tableview里有不同的cell存在,那是实现不... 查看详情

RxSwift + RxRealm + RxCocoa 向 UITableView 插入行

】RxSwift+RxRealm+RxCocoa向UITableView插入行【英文标题】:RxSwift+RxRealm+RxCocoainsertrowstoUITableView【发布时间】:2016-10-2207:56:11【问题描述】:当我观察我的领域模型并将更改绑定到表视图时,它可以工作。但是当我尝试向表中添加行时... 查看详情

也使用 UISearchController 时的 RxSwift UITableView 绑定

】也使用UISearchController时的RxSwiftUITableView绑定【英文标题】:RxSwiftUITableViewbindingwhenalsousingaUISearchController【发布时间】:2017-11-2619:24:15【问题描述】:在我的视图控制器中,我有一个与UITableView关联的UISearchController。所以我所有... 查看详情

rxswift之ui控件uitableview扩展的基本使用(代码片段)

一、单分区的表格如下所示,单个分区的表格展示:示例代码:importUIKitimportRxSwiftimportRxCocoaclassViewController:UIViewControllervartableView:UITableView!letdisposeBag=DisposeBag()overridefuncviewDidLoa 查看详情

swift-rxswift的使用详解32(uitableview的使用3:刷新表格数据)

参考技术A(1)界面初始化完毕后,tableView默认会加载一些随机数据。(2)点击右上角的刷新按钮,tableView会重新加载并显示一批新数据。(3)为方便演示,每次获取数据不是真的去发起网络请求。而是在本地生成后延迟2秒返... 查看详情

如何在 RxSwift 中观察对象的属性?

】如何在RxSwift中观察对象的属性?【英文标题】:Howtoobserveobject\'spropertyinRxSwift?【发布时间】:2018-06-2319:08:39【问题描述】:我有以下Forecast类:classForecastletcity:CityvarcurrentTemperature:StringdidSetprint("curtepmwassetto\\(currentTemperature)")ini 查看详情

如何在 xcode 的 Playground 中导入 RxSwift?

】如何在xcode的Playground中导入RxSwift?【英文标题】:HowtoimportRxSwiftinPlaygroundofxcode?【发布时间】:2017-02-0706:08:20【问题描述】:我正在尝试通过以下方式在xcode游乐场中导入rxswift:geminstallcocoapods-playgrounds然后podplaygroundsRxSwift但... 查看详情

如何在 RxSwift 中设置 RxTimeInterval 以防抖动?

】如何在RxSwift中设置RxTimeInterval以防抖动?【英文标题】:HowtosetRxTimeIntervalfordebounceinRxSwift?【发布时间】:2019-06-0813:21:47【问题描述】:无法在rxswift中设置去抖动的Rxtimeinterval。我的代码如下。我收到此错误消息“无法将\'Double... 查看详情

如何使用 RxSwift 在 Moya 中重试请求?

】如何使用RxSwift在Moya中重试请求?【英文标题】:HowtoretryarequestinMoyawithRxSwift?【发布时间】:2020-05-2320:02:28【问题描述】:我是RxSwift的新手,我正在使用Moya和RxSwift在我的应用程序中建立网络。对于给定的ProviderType,我有以下... 查看详情

如何在 RxSwift 中将值附加到观察到的数组

】如何在RxSwift中将值附加到观察到的数组【英文标题】:HowdoIappendvaluesfoanobservedarrayinRxSwift【发布时间】:2020-01-0308:59:16【问题描述】:试图抓住RxSwift并在一些事情上陷入困境。varobservedData=BehaviorSubject.from([2,3,4,5,6]).map($0*3).subsc... 查看详情