我有一个向其中添加了UITapGestureRecognizer
的UIView。我添加了UICollectionView
作为子视图。问题是UICollectionView
使用UITapGestureRecognizers
来捕获集合视图单元格上的水龙头,而父UIView会捕获它们。有没有一种方法可以传递这些识别器,以便同时由UIView
和UICollectionView
处理?
**编辑-添加代码示例**
let mainView = UIView()
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(foo))
mainView.addGestureRecognizer(tapGestureRecognizer)
let collectionView = UICollectionView(/*...*/)
collectionView.delegate = self
mainView.addSubview(collectionView)
func foo(_ gestureRecognizer: UIGestureRecognizer) {
// Will be called when I tap on mainView
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// Will NOT be called when I tap on collectionView's cells
}
谢谢。
答案 0 :(得分:1)
您可以从UIGestureRecognizerDelegate
实现这一目标。将代表分配给您的手势,然后使用以下扩展名。下方的Delegate
仅允许手势从collectionView
向外触摸时接收手势。
extension SharePathViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
let point = touch.location(in: view)
return !collectionView.frame.contains(point)
}
}
如果您希望在点击单元格时调用手势功能,然后在选定单元格时简单地调用该功能。