UITextView中的光标位置

时间:2010-09-09 17:54:47

标签: objective-c cocoa-touch uitextview

我正在寻找隐私方式来查找UITextView中Cursor或Caret(闪烁条)的位置,最好是{{ 1}}。

可能存在这样的问题,但它没有提供明确的方法。 和, 我不是指所选区域的CGPoint

4 个答案:

答案 0 :(得分:20)

刚刚在另一个主题中得到它:

需要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

答案 1 :(得分:2)

SWIFT 2.1版本:

let cursorPosition = infoTextView.caretRectForPosition( (infoTextView.selectedTextRange?.start)! ).origin

print("cursorPosition:\(cursorPosition)")

答案 2 :(得分:0)

没有这样的方法。完全停止。

你唯一可以做的就是 close 是使用CoreText并行布局文本,从一个点计算文本位置并将其应用于UITextView。但是,这仅适用于非0选项。此外,CoreText具有不同的文本布局引擎,例如支持字距调整,UITextView不支持。这可能导致渲染文本和布局文本的偏差,从而产生次优结果。

绝对没有办法放置插入符号。如果你使用私有API,这个任务甚至非常。它只是iOS中众多“just do not”中的一个。

答案 3 :(得分:0)

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来定义插入符号的位置。