我以你的方式发送了一个请求请求。
回答这个问题的关键是在你的视图模型中有两个 Observable。一个代表每个单元格的编程状态(用户不输入的内容),一个代表每个单元格的用户输入状态。您使用某种 ID 值(我使用 UUID)连接来自这两个 Observable 的数据。因此,对于您的具体示例,集合的视图模型应如下所示:
typealias CellID = UUID
struct StaticCellState {
let id: CellID
let placeholder: String
}
struct CollectionViewModel {
let cells: Observable<[StaticCellState]>
let cellStates: Observable<[CellID: String]>
}
cells
observable 包含占位符和单元 ID 。这是单元格在配置时使用的数据,并且在该配置的整个生命周期内都不会更改(如果重新使用单元格,它可能会更改。)只有在您要添加/删除单元格或更改单元格时才会更新特定单元格的占位符值。
observable 包含最新的cellStates
用户输入值,并在用户每次输入单元格的文本字段之一时更新。
然后,通过从两个 observables 中传递该单元格的信息来配置您的单元格:
let dataSource = RxCollectionViewSectionedReloadDataSource<SectionOfCustomData>(
configureCell: { dataSource, collectionView, indexPath, item in
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? SomeCell else { return UICollectionViewCell() }
let output = cell.configure(with: item, initial: viewModel.cellStates.map { $0[item.id]! })
output
.bind(to: itemEdit)
.disposed(by: cell.disposeBag)
return cell
})