为它后面的 UIViews 制作一个 UILabel 块触摸事件
Posted
技术标签:
【中文标题】为它后面的 UIViews 制作一个 UILabel 块触摸事件【英文标题】:Make a UILabel Block Touch Events To UIViews Behind It 【发布时间】:2014-11-03 21:51:17 【问题描述】:我在 UIView 上有一个 UILabel。
UIView 具有双击放大功能。但是,如果用户双击文本,我想要一个文本编辑器出现,我不希望图像缩放。现在,如果他们双击文本,编辑器就会出现并放大。
你知道如何让 UILabel 吞下触摸事件吗?
欢迎使用 Objc 和 Swift 回答!
【问题讨论】:
双击是用手势完成的吗?如果是这样,请获取 UILabel 的位置,并确保如果 Tap 正在点击该 UILabel 框位置,则忽略该 Zoom 调用。并允许其余的工作相同。 虽然 IMO 的设计很糟糕。 UIView 不需要知道或关心是否在其顶部的对象上发生了触摸。它应该只是回应。 UILabel 应该能够阻止命令前进并保持其责任 我同意你的看法。顶部的对象应该拦截手势,后面的对象甚至不应该注意到该动作,除非被直接触摸。因此,要么是他们对手势工作方式的设计存在问题,要么是预期存在问题,我们应该解决它。 【参考方案1】:您应该为其启用用户交互并添加一个虚拟手势识别器。您可以通过情节提要或代码轻松做到这一点(Swift 3):
label.isUserInteractionEnabled = true
label.gestureRecognizers = [UIGestureRecognizer()]
【讨论】:
不过,仅此还不够。手势识别器需要拦截触摸。所以它需要是UITapGestureRecognizer
,其中numberOfTapsRequired = 2
。【参考方案2】:
你可以尝试使用 UITextView 来实现它
【讨论】:
【参考方案3】:您只需要启用用户交互。
myLabel.userInteractionEnabled = YES;
【讨论】:
那么听起来你有一个触摸监听器附加到两者的超级视图。 是的,视图(绿色图像)和文本一样有一个监听器。这是因为图像正在监听双击以缩放,但我希望在 UILabel 上双击以阻止对图像的按摩。但我认为“根”UIView 上没有侦听器以上是关于为它后面的 UIViews 制作一个 UILabel 块触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
UIViews 层动画后,UIView 上的 UIPanGestureRecognizer 行为异常