我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?

Posted

技术标签:

【中文标题】我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?【英文标题】:I am able to add a UITapGestureRecognizer to my controllers self.view, but not to any custom views. Why?我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为什么? 【发布时间】:2016-02-11 02:05:53 【问题描述】:

我的 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: 永远不会被击中。

这是为什么?

【问题讨论】:

【参考方案1】:

确保您的UIView'suserInteractionEnabled 设置为true。在这里,层次结构也很重要。

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

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

【讨论】:

谢谢,我已经有一个星期没做这个了,我忘了我有一个 drawView 覆盖所有东西来绘制“手指尾随线”。所以 drawView 阻止了我的任何水龙头被识别。您可以将相同的gestureRezognizer 添加到多个视图吗?这似乎不起作用。 @chrisP 确保你永远不会犯这个错误。很高兴帮助:)

以上是关于我可以将 UITapGestureRecognizer 添加到我的控制器 self.view,但不能添加到任何自定义视图。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:我可以将 UIView 作为我可以创建/修改的参数传递吗?

我需要将一个 ifstream 传递给一个函数,这样我就可以将它添加到一个向量中

我可以将 Enum 扩展为 Enum.GetValues() 吗? [复制]

我可以将 Bootstrap Carousel 移到右侧而不是中心吗?

我可以将标签附加到 SKNode 吗?

我可以将 Unity 与 iOS 混合使用吗?