将点击事件传递给子视图 iOS

Posted

技术标签:

【中文标题】将点击事件传递给子视图 iOS【英文标题】:Pass tap event to the subview iOS 【发布时间】:2015-04-03 08:31:12 【问题描述】:

我有一个 TTTAttributed 标签,可以自行检测其上的链接,并且我有一个执行某些操作的点击手势。

问题是当我有点击手势时它无法打开链接它只能通过点击手势执行操作但我希望如果文本是链接类型那么我的点击手势可以向前点击到TTTAttributed标签的链接检测。

你的努力真的很感激。提前致谢。

【问题讨论】:

【参考方案1】:
label.enabledTextCheckingTypes = NSTextCheckingTypeLink; // Automatically detect links when the label text is subsequently changed
label.delegate = self; // Delegate methods are called when the user taps on a link (see `TTTAttributedLabelDelegate` protocol)
label.text = @"Google it! (https://www.google.co.in/)"; // Repository URL will be automatically detected and linked
NSRange range = [label.text rangeOfString:@"Google"];
[label addLinkToURL:[NSURL URLWithString:@"http://google.com/"] withRange:range]; // Embedding a custom link in a substring

设置 TTTAttributed 标签的委托,当用户点击标签时,其委托方法将被调用。

(void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url

在此委托方法中处理您的事件。

【讨论】:

谢谢我找到了解决方案,即在委托方法的默认情况下删除我的点击手势并应用我的自定义操作 (- void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url )。再次感谢。 :)【参考方案2】:

在您的点击手势识别器委托方法中检查[UITapGestureRecognizer state] 属性。根据state 值,在完成自定义轻击手势处理后,将事件传递给TTTAttributedLabel 对象的以下触摸委托方法:

- touchesBegan:withEvent: - touchesMoved:withEvent: - touchesEnded:withEvent: - touchesCancelled:withEvent:

这应该负责执行TTTAttributedLabel 类的默认行为。

【讨论】:

以上是关于将点击事件传递给子视图 iOS的主要内容,如果未能解决你的问题,请参考以下文章

避免将触摸事件传递给后面的背景视图

iOS开发 - 事件传递响应链

iOS开发 - 事件传递响应链

如何将列表视图点击事件中的数据传递到另一个页面中的 Telerik 数据表单

iOS:从顶视图到底视图拦截点击手势事件

vue 中父组件中给子组件的根元素注册点击事件