【发布时间】:2014-10-08 21:26:18
【问题描述】:
我有一个UITextView,其中包含一些文本内容。我需要从点击位置获取字符/字符串的确切范围值。我为 UITextView 设置了TapGestureRecognizer。在其操作方法中,我需要获取点击位置的范围。怎么可能?我用 Stackoverflow 的一些答案进行了测试,但它们并不完美。提前致谢。
【问题讨论】:
标签: ios uitextview nsrange
我有一个UITextView,其中包含一些文本内容。我需要从点击位置获取字符/字符串的确切范围值。我为 UITextView 设置了TapGestureRecognizer。在其操作方法中,我需要获取点击位置的范围。怎么可能?我用 Stackoverflow 的一些答案进行了测试,但它们并不完美。提前致谢。
【问题讨论】:
标签: ios uitextview nsrange
您查看过UITextView 文档吗?
您可以使用此selectedRange 方法来确定用户选择的文本范围。
后期编辑:这只是最近才被否决,这让我有机会重新阅读我的答案,而我也会从 3 年前对我的答案投反对票。
更新答案:
如果有一个点击,点击动作本身应该有你需要的信息。这里的核心是,您需要 UITouch 事件本身,例如计算触摸发生的位置与您的文本应该在哪里相关。这会让您知道用户的手指覆盖了文本的哪一部分。
老实说,我不确定是否存在任何第三方解决方案,但我敢打赌,cocoapods.org 将是一个从关键字 UITextView tap 开始的好地方,如果不是 Github 本身带有关键字:@987654330 @。
如果我要实现这样的解决方案,手头有 UITouch 事件,使用docs 中描述的属性,我会使用类给出的The location of the touch within the view or window
。
通过一方面从https://developer.apple.com/documentation/uikit/uitouch/1618116-location 操作CGPoints,然后您可以使用字符串机制来确定给定字体的文本大小。
虽然this 解决方案适用于UILabel,但它可以:
(a) 以不同的方式使用,但希望在 UITextView 中非常相似
或
(b) 我见过一个虚拟的UILabel 被用来简单地计算需要这种精度的特征中的文本大小。这通常非常有效,因为更改 UILabel 的字符串并不昂贵,而且 UILabel 内置了基于文本和字体的大小计算属性,无需进行布局传递。
再次道歉,如果第一个原始答案看起来很时髦,我现在看到的确实是这样。不过,我会确认,我的原始答案仍然有效(selectedRange 机制)应该是长按所需的解决方案。但是,对于基于单个触地事件的自定义解决方案,通过委托回调收集 UITouch 事件,然后处理那些知道 String 存在的事件是我所知道的最佳方法。
【讨论】: