gpt4 book ai didi

swift - RxSwift + canMoveRowAt

转载 作者:搜寻专家 更新时间:2023-11-01 06:55:20 25 4
gpt4 key购买 nike

我正在使用 RxSwift (RxCocoa) 填充我的 tableView 单元格

viewModel.cellsDriver.drive(tableView.rx.items) { ... }

这样我就无法访问tableView的dataSource的方法

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool

但我需要指定哪些行可以移动

tableView.rx.itemMoved

如何限制哪些行不能拖动?我宁愿避免使用 RxDataSources

最佳答案

为此,您需要做以下两件事之一。要么拉入 RxDataSource Cocoapod 并使用其中一个 TableViewSectionedDataSource 子类,要么创建您自己的数据源。

制作数据源并不难。这是一个例子:https://github.com/dtartaglia/RxMultiCounter/blob/master/RxMultiCounter/RxExtensions/RxSimpleAnimatableDataSource.swift我在我的项目中使用了 DifferenceKit,但如果你想 super 简单,你可以在 func tableView(_:observedEvent) 方法中调用 tableView.reloadData()

这是一个例子:

//
// RxTableViewMovableRowDataSource.swift
//
// Created by Daniel Tartaglia on 12/19/18.
// Copyright © 2018 Daniel Tartaglia. MIT License.
//

import UIKit
import RxSwift
import RxCocoa


class RxTableViewMovableRowDataSource<E, Cell: UITableViewCell>: NSObject, RxTableViewDataSourceType, UITableViewDataSource {

init(identifier: String, configure: @escaping (Int, E, Cell) -> Void, canMoveRowAt: ((Int, E) -> Bool)? = nil) {
self.identifier = identifier
self.configure = configure
self.canMoveRowAt = canMoveRowAt
}

func tableView(_ tableView: UITableView, observedEvent: Event<[E]>) {
values = observedEvent.element ?? []
tableView.reloadData()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return values.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! Cell
let row = indexPath.row
configure(row, values[row], cell)
return cell
}

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
let row = indexPath.row
return canMoveRowAt?(row, values[row]) ?? true
}

let identifier: String
let configure: (Int, E, Cell) -> Void
let canMoveRowAt: ((Int, E) -> Bool)?
var values: Element = []
}

关于swift - RxSwift + canMoveRowAt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com