为了记录,我开始使用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
只是包装在Variable<>
中的视图模型的数组,因此Variable<[SomeViewModel]>.cell.tripViewModel
的类型为SomeViewModel
。
这些都不是真正与问题有关的东西,它们都很好用,当我的视图模型更新时,我的表也更新了。问题是我希望表格单元格不可编辑,并且RxCocoa为上述绑定放置的UITableViewDataSource
在此协议上未实现可选的canEditRowAtIndexPath
方法,并且默认为true,从而使单元格可编辑。我知道我可以实现自己的RxTableViewDataSourceType
,这很简单,但是有很多代码可以使这件事起作用。我对RxSwift和iOS都相当陌生,我是否缺少简单的东西?在上面的闭包中,有没有办法我可以访问UITableCellView
来设置单元格本身的某些属性以使其不可编辑?我缺少的RxCocoa扩展中的内容如何?如果需要的话,我会去写我自己的RxTableViewDataSource
,但我想我想先问一下。
谢谢,
-比尔
我posted在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提供了答案。