如何从攻丝位置获取UITextView中文本的Range值?

时间:2014-08-15 04:51:41

标签: ios uitextview nsrange

我有UITextView一些文字内容。我需要从tapped位置获取字符/字符串的确切范围值。我为UITextView设置了TapGestureRecognizer。在其动作方法中,我需要获取拍摄位置的范围。怎么可能?我测试了Stackoverflow的一些答案,但它们并不完美。提前谢谢。

1 个答案:

答案 0 :(得分:-1)

您是否看过UITextView文档?

https://developer.apple.com/library/ios/documentation/uikit/reference/uitextview_class/Reference/UITextView.html#//apple_ref/occ/instp/UITextView/selectedRange

您可以使用此selectedRange方法确定用户选择的文本范围。

后期编辑:这是最近才投票,让我有机会重新阅读我的答案,我也从3年前开始回答我的答案。

更新回答:

如果只有一次点击,则点按操作本身应该包含您需要的信息。在这里的核心,您自己需要UITouch事件,例如计算触摸发生在哪里与文本的位置有关。这将让您知道用户手指覆盖的文本部分。

我真的不确定是否存在任何第三方解决方案,但我敢打赌cocoapods.org是一个以关键字UITextView tap开头的好地方,如果不是{ {3}}本身包含关键字:cocoapod uitextview

如果我正在实施这样的解决方案,手头有UITouch事件,使用Github中描述的属性我会使用类提供的The location of the touch within the view or window

通过从docs单手操作CGPoints,您可以使用String机制来确定给定字体中文本的大小。

虽然https://developer.apple.com/documentation/uikit/uitouch/1618116-location解决方案适用于UILabel,但它可以:

(a)以不同的方式使用,但希望在UITextView

中非常相似

OR

(b)我看到一个虚拟UILabel仅用于计算需要这种精度的特征中的文本大小。这通常非常有效,因为更改UILabel的字符串并不昂贵,UILabel内置了基于文本和字体的大小计算属性,而无需进行布局传递。

再次道歉,如果第一个原始答案看起来很苛刻,那么它确实会以我现在看到的方式出现。不过,我会证实,我的原始答案仍然存在(selectedRange机制)应该是长期压缩所需的解决方案。但是,对于基于单个触摸事件的自定义解决方案,通过委托回调收集UITouch事件,然后处理那些知道String存在的事件是我能说的最佳方法。