我正在寻找一种非私有的方法来找到 UITextView
中光标或插入符号(闪烁的竖线)的位置,最好是作为一个 CGPoint
返回。
可能已经有类似的问题了,但它并没有提供一种确定的方法来完成它。
并且,
我不是指所选区域的 NSRange
。
我正在寻找一种非私有的方法来找到 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 ...
}
<UITextInput>
协议的。 - Dave DeLongSWIFT 2.1版本:
let cursorPosition = infoTextView.caretRectForPosition( (infoTextView.selectedTextRange?.start)! ).origin
print("cursorPosition:\(cursorPosition)")
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
。没有这样的方法,就是这样。
你唯一能做的接近这个目标的方式就是使用 CoreText 在并行布局文本,在那里从一个点计算文本位置,并将其应用于 UITextView。然而,这仅适用于非 0 选择。此外,CoreText 有一个不同的文本布局引擎,例如支持字距,UITextView 不支持。这可能导致呈现和布局文本之间的偏差,从而产生次优的结果。
绝对没有办法定位光标。即使使用私有 API,这个任务也非常困难。这只是 iOS 中许多“不要”的事情之一。
UIMenuController
的。 - Joshua