UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

Posted

技术标签:

【中文标题】UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer【英文标题】:UIGestureRecognizer on UILabel inside UIView inside UIScrollview 【发布时间】:2015-01-26 15:02:52 【问题描述】:

我有一个以编程方式创建的 UILabel,它在 UIView 内的 UIScrollView 内使用自动布局。最初它在屏幕外,然后滑到屏幕上(通过动画自动布局约束常量的变化)。我正在尝试向 UILabel 添加手势识别器(单击),但手势从未被识别。如果我向 UIView 添加一个,则手势识别器将起作用。有谁知道这个问题的解决方案是什么?这是由自动布局引起的问题吗? 谢谢。

编辑

这肯定与滚动视图吞咽触摸有关。我刚刚在滚动视图之外创建了相同的标签,并且手势识别器工作正常!

编辑 2 我可以使用 Interface Builder 在滚动视图中创建标签,但是以编程方式它不起作用...

【问题讨论】:

【参考方案1】:

你必须检查 UILabel 中的User Interaction Enabled

如果您以编程方式添加 UITapGestureRecognizer:

viewDidLoad我添加了以下代码:

let gesture = UITapGestureRecognizer(target: self, action: Selector("myaction"))
self.label.addGestureRecognizer(gesture)

使用选择器:

func myaction() 
    println("Label tapped")

其中self.label 是被点击标签的参考出口。

【讨论】:

1.您是否创建了一个从轻按手势识别器到 viewController 的 IBAction 以检查其是否正常工作? 2.您是否连接了标签和手势识别器(即右键单击gestureRecognizer是否显示引用出口)? 3.你的视图层次结构是 UIViewController > UIView > UIScrollView > UIView > UILabel? 1.不,我没有,因为它都是以编程方式创建的。但我知道代码有效,因为我可以在其他地方使用它并且它工作正常。 2. 我知道我已将手势识别器正确添加到标签中。 3. 我的视图层次结构是 UIViewController->View->View->ScrollView->View 然后将 UILabel 添加到该视图。 (这有点复杂,因为我还有其他事情要做) @Tometoyou 请检查更新后的代码,如果仍然无法正常工作,请使用您的代码 sn-p 更新您的问题【参考方案2】:

原来标签嵌入在 2 个视图中,在滚动视图的视图中。摆脱它似乎解决了他们的问题......

【讨论】:

以上是关于UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UITableViewCell 内的 UIScrollView 内的 UIView 未触发 UITapGestureRecognizer

UIScrollView 内的 UIVIew 反弹回来

在 UIScrollView 内的 UIView 上绘制草图

UIScrollView 内的 UIView 没有收到触摸事件

UIScrollView 内的 UIView 上的 UIButton

UIScrollView 用于主 UIView 内的较小 UIView