在多个视图中处理 UIGestureRecognizer
Handle UIGestureRecognizer in multiple views
我有一个添加了 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
}
谢谢。
您可以通过 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)
}
}
如果您希望在单元格中点击时调用手势函数,则只需在选中单元格时调用该函数即可。
我有一个添加了 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
}
谢谢。
您可以通过 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)
}
}
如果您希望在单元格中点击时调用手势函数,则只需在选中单元格时调用该函数即可。