UITextView中的光标位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITextView中的光标位置相关的知识,希望对你有一定的参考价值。
我正在寻找一种非私人的方式来找到Cursor或Caret(闪烁条)在UITextView
中的位置,最好是作为CGPoint
。
可能存在这样的问题,但它没有提供明确的方法。而且,我不是指所选区域的NSRange
。
答案
刚刚在另一个线程中得到它:
需要ios 3.2或更高版本。
CGPoint cursorPosition = [textview caretRectForPosition:textview.selectedTextRange.start].origin;
在调用此方法之前,请记住检查selectedTextRange是否为nil。您还应该使用selectedTextRange.empty来检查它是否是光标位置而不是文本范围的开头。所以:
if (textview.selectedTextRange.empty) {
// get cursor position and do stuff ...
}
Pixel-Position of Cursor in UITextView
另一答案
SWIFT 2.1版本:
let cursorPosition = infoTextView.caretRectForPosition( (infoTextView.selectedTextRange?.start)! ).origin
print("cursorPosition:(cursorPosition)")
另一答案
没有这种方式。完全停止。
你唯一可以接近的是使用CoreText并行布局文本,从一个点计算文本位置并将其应用于UITextView。但是,这仅适用于非0选项。此外,CoreText具有不同的文本布局引擎,例如支持字距调整,UITextView不支持。这可能导致渲染文本和布局文本的偏差,从而产生次优结果。
绝对没有办法定位插入符号。如果你使用私有API,这个任务甚至非常。这只是iOS中众多“不做”中的一个。
另一答案
Swift 4版本:
// lets be safe, thus if-let
if let selectedTextRange = textView.selectedTextRange {
let caretPositionRect = textView.caretRect(for: selectedTextRange.start)
let caretOrigin = caretPositionRect.origin
print(">>>>> position rect: (caretPositionRect), origin: (caretOrigin)")
}
我们只需使用textView.selectedTextRange
来获取所选文本范围,而不是使用textView.caretRect(for:)
来获得定义插入符号位置的CGRect
。
以上是关于UITextView中的光标位置的主要内容,如果未能解决你的问题,请参考以下文章