我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为什么?
I am able to add a UITapGestureRecognizer to my controllers self.view, but not to any custom views. Why?
我的 ViewController 符合 UIGestureRecognizerDelegate。
我在这个 ViewController 中创建了各种视图。一个名为 circleView 的自定义视图和一个名为 testView 的常规 UIView。
我有以下从 viewDidLoad 调用的函数
func addTapGesturesOnNumberPadDisplay() {
if tapGestureRecognizerNumberPadView == nil {
tapGestureRecognizerNumberPadView = UITapGestureRecognizer(target: self, action: "handleTap:")
tapGestureRecognizerNumberPadView!.delegate = self
//self.circleView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 1
//self.testView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 2
self.view.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 3
}
}
此代码有效,第 3 行处于活动状态。我的 func handleTap(sender: UITapGestureRecognizer) {
被触发了。但是,如果我注释掉第 3 行,并激活第 1 行或第 2 行...... handleTap:
永远不会被命中。
这是为什么?
确保 userInteractionEnabled
设置为 UIView's
的 true。这里的层次结构也很重要。
如果您在 circleView
和 testView
的顶部有任何 UIView
,那么它将不起作用。
除此之外,第三行有效,因为您将 UITapGestureRecognizer
添加到 UIViewController
的 superview
。
我的 ViewController 符合 UIGestureRecognizerDelegate。
我在这个 ViewController 中创建了各种视图。一个名为 circleView 的自定义视图和一个名为 testView 的常规 UIView。
我有以下从 viewDidLoad 调用的函数
func addTapGesturesOnNumberPadDisplay() {
if tapGestureRecognizerNumberPadView == nil {
tapGestureRecognizerNumberPadView = UITapGestureRecognizer(target: self, action: "handleTap:")
tapGestureRecognizerNumberPadView!.delegate = self
//self.circleView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 1
//self.testView!.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 2
self.view.addGestureRecognizer(tapGestureRecognizerNumberPadView!) // 3
}
}
此代码有效,第 3 行处于活动状态。我的 func handleTap(sender: UITapGestureRecognizer) {
被触发了。但是,如果我注释掉第 3 行,并激活第 1 行或第 2 行...... handleTap:
永远不会被命中。
这是为什么?
确保 userInteractionEnabled
设置为 UIView's
的 true。这里的层次结构也很重要。
如果您在 circleView
和 testView
的顶部有任何 UIView
,那么它将不起作用。
除此之外,第三行有效,因为您将 UITapGestureRecognizer
添加到 UIViewController
的 superview
。