将 collectionview 从函数传递到 Selector (UILongPressGestureRecognizer)

Pass collectionview from function to Selector (UILongPressGestureRecognizer)

所以我使用的功能是用户可以长按 UICollectionView(注意:我的屏幕上有多个集合视图)。这会触发一个动作,但是当我尝试将集合视图从我的 longPressFolder 函数传递给 handleLongPress 函数时,它不起作用。

    override func viewDidLoad() {
        super.viewDidLoad()       

        // add long press to collection View
        longPressFolder(newestFoldersCollectionView)
        longPressFolder(topFoldersCollectionView)
}

   func longPressFolder(collectionview: UICollectionView) {
        // Long press
        let lpgr : UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(FolderOverviewController.handleLongPress(_:)))
        lpgr.minimumPressDuration = 0.4
        lpgr.delegate = self
        lpgr.delaysTouchesBegan = true
        collectionview.addGestureRecognizer(lpgr)
    }

这是代码不起作用的部分。它说我的集合视图未解析,但我似乎找不到将集合视图从我的一个函数传递到另一个函数的方法。

// long press
func handleLongPress(gestureRecognizer : UILongPressGestureRecognizer){
    if (gestureRecognizer.state != UIGestureRecognizerState.Ended){
        return
    }

    let p = gestureRecognizer.locationInView(collectionview)

    if let indexPath: NSIndexPath = (collectionview.indexPathForItemAtPoint(p))!{
        //do whatever you need to do
        ...               
        }
        collectionview.reloadData()
    }        
}

替换

if let indexPath: NSIndexPath = (collectionview.indexPathForItemAtPoint(p))!{

if let indexPath: NSIndexPath = ((gestureRecognizer.view as! UICollectionView).indexPathForItemAtPoint(p))!{

如果您在识别器上使用 .view,您可以获得对手势识别器视图的引用。所以尝试:

let collectionview = gestureRecognizer.view as! UICollectionView