我需要使用RxSwift在集合视图中按特定索引选择项目。这种方法不起作用。
collectionView.rx.modelSelected(SearchResult.self).subscribe(onNext:{ menuItem in }).addDisposableTo(disposeBag)
有人能帮忙吗?
我需要使用RxSwift在集合视图中按特定索引选择项目。这种方法不起作用。
collectionView.rx.modelSelected(SearchResult.self).subscribe(onNext:{ menuItem in }).addDisposableTo(disposeBag)
有人能帮忙吗?
如果您想获取所选项目的indexPath,可以使用以下方法:
collectionView
.rx
.itemSelected
.subscribe(onNext:{ indexPath in
//your code
}).disposed(by: disposeBag)
如果您希望选中该模型:
collectionView
.rx
.modelSelected(SearchResult.self)
.subscribe(onNext: { (model) in
//Your code
}).disposed(by: disposeBag)
你可以将上述内容结合起来,按以下方式获取具有其indexPath的modelSelected:
Observable
.zip(
collectionView
.rx
.itemSelected
,collectionView
.rx
.modelSelected(SearchResult.self)
)
.bind{ [unowned self] indexPath, model in
}
.disposed(by: disposeBag)
}
在 mojtaba al moussawi 的回答基础上,我做了一个扩展来简化压缩:
extension Reactive where Base: UICollectionView {
public func modelAndIndexSelected<T>(_ modelType: T.Type) -> ControlEvent<(T, IndexPath)> {
ControlEvent(events: Observable.zip(
self.modelSelected(modelType),
self.itemSelected
))
}
}
你会使用它类似于:
collectionView
.rx
.modelAndIndexSelected(SearchResult.self)
.subscribe(onNext: { (model, index) in
//Your code
}).disposed(by: disposeBag)
menuItem
是否根据你点击的单元格具有正确的值? - dsapalodebug
运算符进行调试 - 只需在.subscribe
之前添加以下内容:.debug("RX: Model selected")
,并查看幕后发生了什么(是否已订阅?可能不止一次?也可能在有机会发出任何内容之前被处理掉了)。 - goldengilrx.items
重载之一填充表格时才能使用modelSelected(:)
。您是否正在使用其中一个重载?另一个要检查的事项是确保您的代码中没有设置表格的委托。 - Paul