UITextView中的光标位置

问题描述 投票:12回答:4

我正在寻找一种非私人的方式来找到Cursor或Caret(闪烁条)在UITextView中的位置,最好是作为CGPoint

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

objective-c cocoa-touch uitextview
4个回答
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


2
投票

SWIFT 2.1版本:

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

print("cursorPosition:\(cursorPosition)")

0
投票

没有这种方式。完全停止。

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

绝对没有办法定位插入符号。如果你使用私有API,这个任务甚至非常。这只是iOS中众多“不做”中的一个。


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

© www.soinside.com 2019 - 2024. All rights reserved.