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中的光标位置的主要内容,如果未能解决你的问题,请参考以下文章

UITextView中的光标位置

如何更改 UITextView 内的起始光标位置

如何在 UITextView 中找到光标的位置

如何让 UIScrollView 滚动到 UITextView 的光标位置?

iOS:滚动视图到文本视图中的当前光标位置

当有多行时,“手动”处理 UITextView 的文本和光标位置中断