为它后面的 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 块触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

IOS UILabe及UIFont用法总结

UIViews 层动画后,UIView 上的 UIPanGestureRecognizer 行为异常

如何在 WPF 中制作侧边栏

界面构建 - UIViews vs Images vs Core graphics vs PDF 子类

增加内容大小时如何防止内容偏移

如何制作这个浮动视图动画