1

默認行爲而收集的觀點是中期滾動:如何觸發集合視圖的didSelectItemAtIndexPath:在滾動時點擊?

  • 自來水#1:停止滾動
  • 自來水#2:觸發didSelectItemAtIndexPath

我想要什麼,而收集視圖爲中間滾動:

  • 自來水#1:觸發didSelectItemAtIndexPath

會是怎樣實現這個乾淨的,正確的做法? FWIW,我意識到這可能是意想不到的行爲。

回答

0

我認爲最好的方法是使用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 

}

}

相關問題