默認行爲而收集的觀點是中期滾動:如何觸發集合視圖的didSelectItemAtIndexPath:在滾動時點擊?
- 自來水#1:停止滾動
- 自來水#2:觸發
didSelectItemAtIndexPath
我想要什麼,而收集視圖爲中間滾動:
- 自來水#1:觸發
didSelectItemAtIndexPath
會是怎樣實現這個乾淨的,正確的做法? FWIW,我意識到這可能是意想不到的行爲。
默認行爲而收集的觀點是中期滾動:如何觸發集合視圖的didSelectItemAtIndexPath:在滾動時點擊?
didSelectItemAtIndexPath
我想要什麼,而收集視圖爲中間滾動:
didSelectItemAtIndexPath
會是怎樣實現這個乾淨的,正確的做法? FWIW,我意識到這可能是意想不到的行爲。
我認爲最好的方法是使用UICollectionView addGestureRecognizer添加一個觸摸手勢識別器,然後處理觸摸手勢(例如獲取集合視圖中的觸摸位置,使用它獲取被觸摸的項目的indexPath ,然後自己調用collectionView.didSelectItemAtIndexPath)。至於滾動,一旦滾動開始,您可以使用UISrollViewDelegate方法禁用集合視圖上的用戶交互,然後在滾動停止時和/或在viewDidDisappear視圖控制器函數中重新啓用集合視圖上的用戶交互。
像這樣:
公共類MyViewController:UIViewController的{
@IBOutlet弱VAR的CollectionView:UICollectionView!
var collectionViewTap:UITapGestureRecognizer?
覆蓋公共FUNC viewDidLoad中(){
collectionViewTap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
self.view.addGestureRecognizer(collectionViewTap!)
}
覆蓋公共FUNC viewDidDisappear(動畫:BOOL){
collectionView.userInteractionEnabled = true
}
FUNC handleTap(發件人: UITapGestureRecognizer){
let touchPoint = sender.locationOfTouch(0, inView: collectionView)
let indexPath = collectionView.indexPathForItemAtPoint(touchPoint)
if (indexPath != nil) {
collectionView(collectionView, didSelectItemAtIndexPath: indexPath!)
}
}
公共FUNC scrollViewWillBeginDragging(滾動視圖:UIScrollView中){
collectionView.userInteractionEnabled = false
}
公共FUNC scrollViewDidEndDecelerating(滾動視圖:UIScrollView中){
collectionView.userInteractionEnabled = true
}
}