【问题标题】: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: 永远不会被击中。

这是为什么?

【问题讨论】:

    标签: objective-c swift cocoa-touch uitapgesturerecognizer


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我已经有一个星期没做这个了,我忘了我有一个 drawView 覆盖所有东西来绘制“手指尾随线”。所以 drawView 阻止了我的任何水龙头被识别。您可以将相同的gestureRezognizer 添加到多个视图吗?这似乎不起作用。
    • @chrisP 确保你永远不会犯这个错误。很高兴帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多