我需要使用RxSwift选择集合视图中特定索引处的项目。此方法无法正常工作。
collectionView.rx.modelSelected(SearchResult.self).subscribe(onNext:{ menuItem in }).addDisposableTo(disposeBag)
有人可以帮忙吗?
答案 0 :(得分:13)
如果要选择项目的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)
}
答案 1 :(得分:0)
根据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)