如何在RxSwift中选择CollectionView单元格

时间:2017-04-10 12:50:25

标签: ios swift3 uicollectionview rx-swift

我需要使用RxSwift选择集合视图中特定索引处的项目。此方法无法正常工作。

 collectionView.rx.modelSelected(SearchResult.self).subscribe(onNext:{ menuItem in }).addDisposableTo(disposeBag) 

有人可以帮忙吗?

2 个答案:

答案 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)