我正在寻找非隐私方式来查找UITextView
中Cursor或Caret(闪烁条)的位置,最好是{{ 1}}。
可能存在这样的问题,但它没有提供明确的方法。
和,
我不是指所选区域的CGPoint
。
答案 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 ...
}
答案 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
来定义插入符号的位置。