单击手势不适用于以编程方式添加的子视图

Posted

技术标签:

【中文标题】单击手势不适用于以编程方式添加的子视图【英文标题】:Single Tap Gesture not working on sub view that was added programatically 【发布时间】:2016-06-27 08:03:29 【问题描述】:

背景: 我曾经在视图上有一个触摸手势检测器,它工作得很好。 然后我的应用增长了,现在我需要将相同的手势检测器添加到 3 个视图中。

问题: 当我将手势检测器添加到已使用“.addSubview”附加到父视图的视图时,它永远不会被调用

代码:

    parentView.addSubview(waveview)
    parentView.addSubview(waveviewCap)
    parentView.addSubview(waveviewCapBG)

    let singleFingerDTap:UITapGestureRecognizer=UITapGestureRecognizer.init(target: self, action: "handleWaveviewTap")
    singleFingerDTap.numberOfTapsRequired = 1;

    self.waveview!.addGestureRecognizer(singleFingerDTap)
    self.waveviewCap!.addGestureRecognizer(singleFingerDTap)
    self.waveviewCapBG!.addGestureRecognizer(singleFingerDTap)

【问题讨论】:

你试过userInteractionEnabled 吗? 我相信你不应该在不同的视图中添加相同的手势对象。尝试使用相同的选择器使用不同的手势 【参考方案1】:

请在您的父视图中添加 UIGestureRecognizerDelegate。并更新“shouldReceiveTouch”委托方法。

  func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool 

    if touch.view == waveview || touch.view == waveviewCap || touch.view == waveviewCapBG 

        return true

    
    return false

希望它的工作......

【讨论】:

以上是关于单击手势不适用于以编程方式添加的子视图的主要内容,如果未能解决你的问题,请参考以下文章

单击事件不适用于以编程方式/动态创建的选项按钮

Segue 不适用于动态添加的子视图

添加手势识别器 uivew 导航栏 swift 不起作用

用户输入不适用于在表格视图中以编程方式添加的文本字段

按钮操作不适用于 subView

spannablestring 不适用于以编程方式创建的按钮