I need to select the item at specific index in collection view using RxSwift.This method is not working fine.
collectionView.rx.modelSelected(SearchResult.self).subscribe(onNext:{ menuItem in }).addDisposableTo(disposeBag)
Can anybody help?
If you want the indexPath of item selected you can use the following :
collectionView
.rx
.itemSelected
.subscribe(onNext:{ indexPath in
//your code
}).disposed(by: disposeBag)
and if you want to the model being selected :
collectionView
.rx
.modelSelected(SearchResult.self)
.subscribe(onNext: { (model) in
//Your code
}).disposed(by: disposeBag)
And you can combine the above, to get the modelSelected with their indexPath as follow:
Observable
.zip(
collectionView
.rx
.itemSelected
,collectionView
.rx
.modelSelected(SearchResult.self)
)
.bind{ [unowned self] indexPath, model in
}
.disposed(by: disposeBag)
}
Building off of mojtaba al moussawi's answer, I made an extension to make the zipping easy:
extension Reactive where Base: UICollectionView {
public func modelAndIndexSelected<T>(_ modelType: T.Type) -> ControlEvent<(T, IndexPath)> {
ControlEvent(events: Observable.zip(
self.modelSelected(modelType),
self.itemSelected
))
}
}
Which you would use like:
collectionView
.rx
.modelAndIndexSelected(SearchResult.self)
.subscribe(onNext: { (model, index) in
//Your code
}).disposed(by: disposeBag)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With