ios - 如何在保持单元格选择的同时向 UICollectionView 添加点击手势?

标签 ios swift uicollectionview uigesturerecognizer uiresponder

任务

UICollectionView 添加单击手势,不妨碍单元格选择。

我想在 collectionView 的无单元格部分进行一些其他点击。

代码

使用 XCode8、Swift 3。

override func viewDidLoad() {
    ...
    collectionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print(indexPath)
}

func tap(sender: UITapGestureRecognizer){
    print("tapped")
}

结果

是的,它现在妨碍了。当您点击单元格时,它会记录“已点击”。

分析

  • 我检查了 collectionView 和单元格的 hitTest 返回值。两者都返回了被点击的 cell,这意味着它们形成了 Cell -> CollectionView
  • 的响应者链
  • 手机上没有手势
  • collectionView 上的 3 个手势,似乎没有人使用单元格选择
    • UIScrollViewDelayedTouchesBeganGestureRecognizer
    • UIScrollViewPanGestureRecognizer
    • UITapGestureRecognizer
  • callStack,似乎单元格选择具有与手势的目标 Action 模式不同的堆栈跟踪。
  • 双击手势与单元格选择一起使用。

问题

找不到更多踪迹。关于如何实现细胞选择或完成此任务的任何想法?

最佳答案

每当你想添加一个手势识别器,但又不想从目标 View 中窃取触摸时,你应该设置 UIGestureRecognizer.cancelsTouchesInView为您的 gestureRecognizer 实例设置为 false。

关于ios - 如何在保持单元格选择的同时向 UICollectionView 添加点击手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365971/

相关文章:

iphone - 播放 : Playing a Movie from MPMoviePlayerController results in only audio being streamed to Apple tv

ios - 将 UIImage 传递给 RCTRootView

swift - 如何在 swift 3 中获取这个变量的数量?

swift - 无法将表达式的类型 '[AnyObject]?' 转换为类型 'NSArray'

ios - 使用 AVFoundation 创建包含 QR 的 UIView 时发生间歇性崩溃

ios - 如何使用 MVVM 和 RxSwift 编辑/删除 UICollectionView 单元格

ios - 在 UICollectionView 中检测触摸

ios - Azure 移动服务崩溃

ios - 缩放 super 层时如何不缩放 CATextLayers

swift - 变量 'xxx' 从未发生变化,考虑更改为 'let'