TTTAttributedLabel link 已设置样式并具有 UILongPressGestureRecognizer 但没有 UITapGestureRecognizer

TTTAttributedLabel link is styled and has UILongPressGestureRecognizer but doesn't have UITapGestureRecognizer

在我的项目中,我已将 TTTAttributedLabel 添加到 IB 中的视图并向其添加了 link。

我已经查看了关于 SO 的类似问题(例如 and this),但没有成功。

显示正常,link 样式符合预期。但是当我尝试点击 link 时,-(void)attributedLabel:didSelectLinkWithURL: 没有被调用。但是如果我使用长按而不是 -(void)attributedLabel:didLongPressLinkWithURL:atPoint: 会按预期被解雇。所以我确定代表正在工作。标签似乎甚至没有 tapGestureRecognizer

(lldb) po label.gestureRecognizers
<__NSSingleObjectArrayI 0x60800000ee60>(
<UILongPressGestureRecognizer: 0x7f88f6c5d480; state = Began; view = <TTTAttributedLabel 0x7f88f6f8ada0>; target= <(action=longPressGestureDidFire:, target=<TTTAttributedLabel 0x7f88f6f8ada0>)>>
)

代码如下:

RFStaticAttributedLabelFormView *labelView = [RFStaticAttributedLabelFormView new];
labelView.staticLabel.userInteractionEnabled = YES;
labelView.staticLabel.delegate = self;
NSString *text = RFLocalized(@"TXT_FINES_SEARCH_FNS");
[labelView.staticLabel setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:nil];
NSRange r = [text rangeOfString:RFLocalized(@"TXT_FINES_SEARCH_FNS_LINK")];
[labelView.staticLabel addLinkToURL:[NSURL URLWithString:@"http://www.google.com"] withRange:r];

RFStaticAttributedLabelFormView 是一个视图,从 XIB 实例化。

不知道从这里到哪里去。

您是否实现了 <TTTAttributedLabelDelegate> 协议的委托方法 -(void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url;

我用一个 TTTAttributedLabel 创建了一个全新的项目。在我连接委托方法后,一切都开始按预期工作,包括一次点击。我检查了标签上的手势识别器——结果发现它也没有点击识别器,只有长按识别​​器。

之后我查看了我的原始项目并找到了问题的根源。层次结构中的主视图有另一个拦截所有点击事件的点击手势识别器。我添加了这一行:

tap.cancelsTouchesInView = NO;

并且 TTTAttributedLabel 中的链接开始正常工作。希望这个回答对遇到类似问题的人有所帮助。