【发布时间】:2018-10-16 22:19:30
【问题描述】:
由于某种原因,UITapGestureRecognizer 在我的滚动视图中没有被触发。我尝试了很多解决方案,但都无济于事。
滚动视图:
let scrollView: UIScrollView = {
let scroll = UIScrollView()
scroll.translatesAutoresizingMaskIntoConstraints = false
scroll.showsHorizontalScrollIndicator = false
scroll.showsVerticalScrollIndicator = false
return scroll
}()
包含滚动视图中所有视图的视图(因此“视图”位于此视图中,而不是直接位于滚动视图中):
let contentView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
手势识别器:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.viewTap))
gesture.cancelsTouchesInView = false
gesture.numberOfTapsRequired = 1
view.addGestureRecognizer(gesture)
行动:
@objc func viewTap(sender : UITapGestureRecognizer) {
// do stuff
}
查看层次结构 (https://imgur.com/a/wr3tge4):
[scrollView]
[contentView]
[view] <- UITapGestureRecognizer here
提前致谢!
【问题讨论】:
-
不应该
view.addGestureRecognizer(gesture)必须是contentView.addGestureRecognizer(gesture)吗? -
不,我想将手势识别器放在 contentView 中的“视图”上。 (抱歉造成混淆)
-
您需要显示您的视图层次结构,因为它确实会混淆您拥有什么以及您想要做什么
-
还在 viewTap(_) 中添加断点并尝试在您的视图所在的确切位置点击。此外,您可以在运行时打开 UIView 层次结构以检查您的视图是否真的在屏幕上 - 它可能是零高度或 smth..
-
您还可以为视图背景添加一些颜色,以确保您首先看到它。然后在运行时打开 UI 层次结构以检查它是否没有被任何东西阻塞
标签: ios swift uiscrollview uitapgesturerecognizer