在 UITextView 中的特定单词上添加点击手势识别器

Posted

技术标签:

【中文标题】在 UITextView 中的特定单词上添加点击手势识别器【英文标题】:Add tap gesture recogniser on a specific word in a UITextView 【发布时间】:2013-07-10 11:14:33 【问题描述】:

我有一个带有一些文字的UITextView。此文本是一个属性字符串 (NSAttributedString)。我已将文本的某些部分设置为粗体,并且只想在这些特定单词中添加TapGestureRecogniser

到目前为止,我一直在使用 UITextView 委托的 textViewDidChangeSelection 方法。但这会导致项目的其他部分出现问题。

有没有更直接的方法?

【问题讨论】:

也许你可以参考这个***.com/questions/15034652/… 【参考方案1】:

您只能将 GestureRecognizer 添加到视图,而不是某些单词。 这是一项相当复杂的任务,没有简单的解决方案。

我可以考虑一些方法,例如:

在粗体字上方放置一个透明视图以获取 Tap。 在所有的UITextView中检测Tap,然后根据触摸的位置和粗体字的位置来计算,如果碰到了。

这两个选项都需要大量代码和很多可能失败的边缘情况。

正如我所说,这是一个非常复杂的情况,您可能希望继续使用 textViewDidChangeSelection 并解决问题,我们可以为您提供帮助。

【讨论】:

如果文本是静态的,在单词顶部添加透明视图会很好。但事实并非如此。它是用户可编辑的,并且可以被其他视图附加。 那么第二个选项,你需要使用字体计算字符串的大小来尝试找出位置,使用 sizeWithFont: 我有一个 UITextView,它接受用户的输入,还有表格视图(单元格)。所选单元格的内容将附加到文本视图中的字符串(或替换先前的选择)。然后将字符串转换为 NSAttributedString。我想要实现的是,当用户点击单词(从表格中选择)时,表格视图应该重新出现,因此用户可以更改他们的选择。类似于 Facebook ios 应用的状态更新视图。如果在文本视图中点击标记的朋友或位置,则相应的视图会重新出现。呸! 迟到的评论,但你的提示对我来说非常有效。使用 UITextPosition + UITextGranularity + firstRectForRange。

以上是关于在 UITextView 中的特定单词上添加点击手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

如何通过点击 UITextView 中的特定字符来显示圆角灰色背景?

在 UITextview 中的单词中间点击空格时光标移动最后一行

从 UITextView 中的点击获取单词

如何从点击的单词 UITextview 中获取字符范围

当用户在 UITextView 中选择特定单词时

如何在 Swift 中制作一个单词可点击的 UITextView?