didSelectItemAtIndexPath 在集合视图 Swift 中不起作用

Posted

技术标签:

【中文标题】didSelectItemAtIndexPath 在集合视图 Swift 中不起作用【英文标题】:didSelectItemAtIndexPath Doesn't Work In Collection View Swift 【发布时间】:2015-07-28 16:04:52 【问题描述】:

我一直在开发一个新应用程序,它在集合视图中显示 Gif。我还在为我的集合视图中的单元格使用自定义集合视图单元格类。

didSelectItemAtIndexPath 方法虽然不起作用...

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 

    println("it worked")

    // ^this did not print

如何更改它以便我可以使用手势识别器获取单击项目的 indexPath?

【问题讨论】:

试试这个:UICollectionView only calling didSelectItemAtIndexPath if user double taps, will not call when user single taps 【参考方案1】:

正如@santhu 所说 (https://***.com/a/21970378/846780)

didSelectItemAtIndexPath 在没有任何 subView 时被调用 collectionViewCell 响应该触摸。当 textView 响应 那些接触,所以它不会将这些接触转发到它的超级视图,所以 collectionView 不会得到它。

所以,你有一个 UILongPressGestureRecognizer 并且它避免了 didSelectItemAtIndexPath 呼叫。

使用UILongPressGestureRecognizer 方法,您需要处理handleLongPress 委托方法。基本上你需要得到gestureReconizer.locationInView 并知道此时的indexPath (gestureReconizer.locationInView)。

    func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) 
        if gestureReconizer.state != UIGestureRecognizerState.Ended 
            return
        

        let p = gestureReconizer.locationInView(self.collectionView)
        let indexPath = self.collectionView.indexPathForItemAtPoint(p)

        if let index = indexPath 
            var cell = self.collectionView.cellForItemAtIndexPath(index)
            // do stuff with your cell, for example print the indexPath
             println(index.row)
         else 
            println("Could not find index path")
        
    

【讨论】:

以上是关于didSelectItemAtIndexPath 在集合视图 Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

didSelectItemAtIndexPath 没有在 ios swift 中调用

未调用 UICollectionView 的 didSelectItemAtIndexPath

如果在 didSelectItemAtIndexPath: 中调用 cellForItemAtIndexPath: 有啥问题:

如何防止collectionView:didSelectItemAtIndexPath委托方法被调用多次

iOS 为啥不能从 UITapGestureRecognizer 调用方法 collectionView:didSelectItemAtIndexPath:?

某些集合视图单元 didSelectItemAtIndexPath 不起作用