我可以将 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。这里的层次结构也很重要。

如果您在 circleViewtestView 的顶部有任何 UIView,那么它将不起作用。

除此之外,第三行有效,因为您将 UITapGestureRecognizer 添加到 UIViewControllersuperview