将TapGestureRecognizer附加到容器视图时,未检测到“触摸”按钮

时间:2019-03-07 07:29:13

标签: swift uiview uitapgesturerecognizer

在我的应用中,我有一个视图控制器,该视图具有附加的tapGesture识别器。

tapGesture对隐藏的视图(某种面板)进行了动画处理,该视图变得可见。该视图包含一个按钮,该按钮可以执行一些操作,然后隐藏面板。

但是似乎由于手势附加到了视图构建者的视图上,所以未检测到按钮上的触摸,仅触发了视图控制器视图上的点击。

我尝试过与firstResponder一起玩,但似乎不起作用

func addGesture(){
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(togglePanel))
    myView.addGestureRecognizer(tapGesture)
}

我的面板像这样插入:

 insertSubview(actionPanel, at: 0)

我的按钮

actionPanel.addSubview(dismissBtn)

按钮动作

dismissBtn.addTarget(self, action: #selector(hideActionPanel), for: .touchUpInside)

@objc func hideActionPanel(){
        print("tapped")
    }

2 个答案:

答案 0 :(得分:0)

似乎无效的按钮

使用xcode运行应用,使用Xcode“调试视图层次结构”

此按钮或其超级视图可能是.userInteractionEnabled = false

我假设您的动画图像是超级视图,并且该图像默认情况下会关闭用户交互

添加此xxImage.userInteractionEnabled = true

答案 1 :(得分:0)

您可以将UIGestureRecognizerDelegate添加到您的班级中。要了解更多信息,请访问UIGestureRecognizerDelegate

然后实施func gestureRecognizer(UIGestureRecognizer, shouldReceive: UITouch) -> Bool。每当手势即将发生时都会调用此函数。如果您想确切了解其工作原理,请点击gestureRecognizer

不要忘了像这样将手势与代表联系起来。

tapGesture.delegate = self

最后,在UIGestureRecognizerDelegate函数内部,检查被触摸的视图是否等于具有gestureRecognizer的视图。这将阻止任何基础视图识别手势。

if touch.view == gestureRecognizer.view { return true } return false