6

在我提出问题之前,我正在使用 Swift 2 和 xcode 7 beta 进行记录。

所以我使用 RxSwift 和 RxCocoa 将我的 ViewModel 绑定到 TableView。在我的UITableViewController viewDidLoad我正在做这个绑定......

someCollectionOfViewModels
    .bindTo(self.tableView.rx_itemsWithCellIdentifier("SomeCell")) { 
        (_, viewModel, cell: SomeTableViewCell) in
            cell.tripViewModel = viewModel
    }

someCollectionOfViewModels只是一个包含在 a 中的视图模型数组Variable<>,因此Variable<[SomeViewModel]>.cell.tripViewModel是 type SomeViewModel

这些都与问题无关,一切都很好,当我的视图模型更新时,我的表也会更新。问题是我希望我的表格单元格是不可编辑的UITableViewDataSource,并且 RxCocoa 为上述绑定设置的并没有实现canEditRowAtIndexPath此协议上的可选方法,它默认为 true 使单元格可编辑。我知道我可以实现自己的RxTableViewDataSourceType,这相当简单,但是很多代码只是为了让这件小事工作。我对 RxSwift 和 iOS 都很陌生,我错过了一些简单的东西吗?上面的闭包中有没有办法让我可以访问UITableCellView在单元格本身上设置一些属性以使其不可编辑?我缺少的 RxCocoa 扩展中的一些东西怎么样。如果必须的话,我会去写我自己的RxTableViewDataSource,但我想我会先在这里问。

谢谢,

-账单

4

1 回答 1

4

我在 Github 项目中发布了同样的问题并收到了答案。关键是像这样rx_setDelegate(self)实现和实现UITableViewDelegate

class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    let items = Observable.just([
        "First Item",
        "Second Item",
        "Third Item"
    ])

    items
        .bindTo(tableView.rx_itemsWithCellIdentifier("Cell", cellType: UITableViewCell.self)) { (row, element, cell) in
            cell.textLabel?.text = "\(element) @ row \(row)"
        }
        .addDisposableTo(disposeBag)


    tableView
        .rx_modelSelected(String)
        .subscribeNext { value in
            DefaultWireframe.presentAlert("Tapped `\(value)`")
        }
        .addDisposableTo(disposeBag)

    tableView.rx_setDelegate(self)
        .addDisposableTo(disposeBag)
}

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    return UITableViewCellEditingStyle.None
}
}

感谢 RxSwift 项目中的 Krunoslav Zaher 提供了答案。

于 2015-12-23T22:40:30.630 回答