UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel

Posted

技术标签:

【中文标题】UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel【英文标题】:UITapGestureRecognizer working on UIImageView but not on UILabel 【发布时间】:2016-11-08 09:20:39 【问题描述】:

我有一个名为CommentsTableViewCellUITableViewCell 类,其中包括UIImageViewUILabel

我正在使用的代码:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(CommentsTableViewCell.showUserViewController))
nameLabel.userInteractionEnabled = true
avatarRoundImageView.userInteractionEnabled = true
nameLabel.addGestureRecognizer(tapGesture)
avatarRoundImageView.addGestureRecognizer(tapGesture)

正如你所理解的,我有一个函数可以在点击UIImageViewUILabel 时显示另一个UIViewController

让我感到困惑的是tapGestureUIImageView 上正常工作,但在UILabel 上却不行。

有什么想法吗?

【问题讨论】:

【参考方案1】:

所有控制都需要不同的手势

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(CommentsTableViewCell.showUserViewController))
avatarRoundImageView.userInteractionEnabled = true
avatarRoundImageView.addGestureRecognizer(tapGesture)

let tapGesture2 = UITapGestureRecognizer(target: self, action: #selector(CommentsTableViewCell.showUserViewController))
nameLabel.userInteractionEnabled = true
nameLabel.addGestureRecognizer(tapGesture2)

【讨论】:

我遇到了一个不同的问题,但是在您的回答中看到 userInteractionEnabled 标志帮助我解决了这个问题,谢谢!对了,现在改成isUserInteractionEnabled了。 @dcp 继续努力。【参考方案2】:

您需要创建两个 UITapGestureRecognizer 对象,因为 UITapGestureRecognizer 与单个 UI 元素对象一起使用。因此,创建第二个TapGestureRecognizer 并将一个分配给UILabel,并将一个分配给UIImageView

来自UIGestureRecognizer 文档。

手势识别器对针对特定视图和该视图的所有子视图进行命中测试的触摸进行操作。因此,它必须与该视图相关联。要建立这种关联,您必须调用 UIView 方法addGestureRecognizer(_:)。手势识别器不参与视图的响应者链。

【讨论】:

以上是关于UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel

UIAlertController 上的 UITapGestureRecognizer 未触发

UITapGestureRecognizer 每个值都一样

uiscrollview 内的 uiimageview 上的 UITapgesturerecognizer

iOS - TapGestureRecognizer - 点击适用于整个屏幕而不是视图

如何为 UIViewController.view 中也具有 UITapGestureRecognizer 的 UIView 挑选和操作 UITapGestureRecognizer?