UITextView 应该检测链接,但否则应该将触摸传播到下面的视图

2023-12-14

我有一个文本视图,我想在其中检测链接,但是当触摸点处没有链接时,它应该将触摸传播到下面的视图(目前没有)。它将包含在表格视图单元格中,如果用户点击链接,它应该进行交互(它可以工作),但是当点击另一个点时,它应该选择表格视图单元格。

我需要文本不可选择,所以我遵循了https://stackoverflow.com/a/27264999/811405并实施:

-(BOOL)canBecomeFirstResponder{
    return NO;
}

在此之前它也没有发送下面的触摸事件,但我将其包含在内只是为了防止它干扰解决方案。


您需要将其子类化,而不是阻止您的文本视图成为第一响应者hitTest方法,以便当单击发生在链接内时返回 textView,否则返回 nil。

@interface LinkOnlyTextView : UITextView
@end

@implementation LinkOnlyTextView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSUInteger glyphIndex = [self.layoutManager glyphIndexForPoint:point inTextContainer:self.textContainer fractionOfDistanceThroughGlyph:nullptr];
    NSUInteger characterIndex = [self.layoutManager characterIndexForGlyphAtIndex:glyphIndex];
    if (characterIndex < self.textStorage.length) {
        if ([self.textStorage attribute:NSLinkAttributeName atIndex:characterIndex effectiveRange:nullptr]) {
            return self;
        }
    }
    return nil;
}

@end

@blwinters 在稍后对此问题的回答中提供了此代码片段的 Swift 版本:https://stackoverflow.com/a/47913329/1279096

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITextView 应该检测链接,但否则应该将触摸传播到下面的视图 的相关文章

随机推荐

  • 如何在没有 APD 的情况下覆盖现有的 PHP 函数?

    我想覆盖 PHP 中已经声明的几个函数 我正在使用的应用程序充满了遗留代码 包括对eval 因此仅替换代码中调用函数的标识符可能还不够 是否可以更改已声明的函数 而不使用高级 PHP 调试器在 PHP5 中 是的 通过使用 runkit f
  • angularjs表单输入建议

    我对 AngularJS 中的表单有疑问 经典 html 和 php 示例
  • 等待加载 angularjs 指令模板

    我想做的是推迟加载指令的 Angular js 模板 直到我真正需要它为止 我什至可能根本不需要它 有没有一种方法可以让我只在需要时加载指令模板 服务可以做到这一点吗 我的应用程序已经加载了很多指令模板 我想避免加载太多的东西 除非我需要它
  • 静态强制两个对象是从相同的(Int)“种子”创建的

    在我正在开发的库中 我有一个类似于以下内容的 API data Collection a Collection Seed etc type Seed Int newCollection Seed gt IO Collection a new
  • 在二进制文件中搜索字符串的代码

    前几天我问过这个问题 如何在二进制文件中查找 ANSI 字符串 我得到了一个非常好的answer 后来变成了一个更难的问题 输入迭代器可以用在需要前向迭代器的地方吗 现在确实不是我能理解的水平 我仍在学习 C 并且正在寻找一种在二进制文件中
  • socket.io 硬编码与动态连接 url

    为什么这里的大多数教程 示例和问题都使用本地 IP 或localhost 或任何其他硬编码路径 如下所示 var socket io connect http 127 0 0 1 3700 而不是简单地 var socket io conn
  • 在 WPF 应用程序中加密凭据

    在 WPF 应用程序中 我想提供典型的 记住我 选项来记住凭据并在下次启动应用程序时自动使用它们 使用单向哈希显然不是一个选择 虽然我可以存储凭据隔离存储 or 在注册表中 加密凭证时需要处理一个问题 如果我使用对称密钥加密算法 我需要将密
  • 检测 ThreadPool WorkItem 已完成/等待完成

    无论出于何种原因 ThreadPool s QueueWorkItem不返回IAsyncResult或工作项的其他一些句柄 这将允许等待它完成 有RegisterWait 方法 但你必须通过WaitHandle并且创建它们是昂贵的 参见IA
  • 检测 QlistWidget 中某行是否单击了某个项目

    我被赋予了这个简单的任务 我有这个列表 每当单击 ok 时我都会插入项目 void Form ok 处理该事件应该将新的列表项添加到列表中 现在我无法做的是检测是否在某行单击了某个项目 然后根据该操作执行某些操作 这是我的代码 includ
  • Angular Material2 单击时更改按钮颜色

    我想在单击按钮时更改材质 mat mini fab 按钮的颜色 我的尝试如下 但不起作用
  • html select(下拉)控制asp.net中的选定索引更改事件

    当值更改时 我试图将后端代码放入我的 html 选择控件 下拉列表 中 以触发后端方法 但我找不到该事件 我尝试了这样的方法
  • 从在 gitlab CI 中不起作用的资源读取文件

    我在使用以下命令在 gitlab CI 上运行测试时遇到错误 gradlew clean test 我正在使用测试容器来运行我的测试 https www testcontainers org modules docker compose 这
  • 在Java中将PDF转换为Word [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Java 可以将 PDF 转换为 Word 吗 我不是在谈论解析 PDF 文档 然后将其再次自定义渲染到 Word 我想要一个可以直接转换它的Jav
  • 在 Visual Studio 设计器中找不到自定义字体的 C# 文件

    我对 C 比较陌生 所以我的 WinForms 项目中几乎有一个包含自定义字体的文件夹 该字体在启动应用程序时工作得非常好 但在 Visual Studio 本身的实际设计器中 无法加载自定义控件 因为我在设计器中使用的路径不同 这是我用来
  • 如何从 png 图像的一行获取 x y 坐标并在闪亮的应用程序中使用它

    这是对此的后续问题在闪亮的应用程序中使用 sliderInput 为区域着色 假设我有这个图像 我如何将 ismirsehregal 的解决方案应用于这张图片 我想我必须把食道的x和y放到代码中 但我不知道如何获取食道的x和y 图中绿色 代
  • 需要一个 API 来检测 iPhone 何时插入

    我正在为 Mac 制作一个应用程序 我需要一个 API 来检测 iPhone 何时插入 谢谢 编辑 具体来说 我需要一个 API 来检测 iPhone 何时插入 Mac 上的 USB 端口 我没有完整的答案 但实现您想要的功能的程序是 US
  • C++:switch 语句在右大括号之前缺少分号

    为了未来读者的利益和我自己的理智 我想绝对清楚地表明 switch没有a的语句default案例 由于涵盖了所有案例 或顺序if elseif else最后的 else 不应执行任何操作 不得省略 并包含对此效果的注释 请参见示例 然而 每
  • 在 Oracle SQL 中处理日期

    我在使用 SQL 方面非常陌生 我尝试做的是仅使用月份和年份选择 waterUsage 和 electrcityUsage 并选择上一年的 waterUsage 和 electrcityUsage 然而 我似乎无法找出使用日期来完成这项工作
  • Swift:iOS 12.2 应用程序启动时崩溃

    更新 Xcode 和 swift 5 后 在 iOS 12 2 上启动模拟器后 我的应用程序在启动时崩溃 但在早期版本的 ios 如 12 0 中 应用程序可以正常工作 我在真实设备 ios 12 0 1 上启动应用程序并且应用程序正常工作
  • UITextView 应该检测链接,但否则应该将触摸传播到下面的视图

    我有一个文本视图 我想在其中检测链接 但是当触摸点处没有链接时 它应该将触摸传播到下面的视图 目前没有 它将包含在表格视图单元格中 如果用户点击链接 它应该进行交互 它可以工作 但是当点击另一个点时 它应该选择表格视图单元格 我需要文本不可