iOS:以编程方式在UITextView中向上,向下,向左和向右移动光标

时间:2018-03-05 12:44:11

标签: ios objective-c position cursor uitextview

我使用以下代码将光标位置从UITextField的开头移动到5个字符:

 txtView.selectedRange = NSMakeRange(5, 0);

现在,如果我将光标放在任意位置,如下图所示,我该如何向上,向下,向左和向右移动光标?

enter image description here

1 个答案:

答案 0 :(得分:1)

左右应该或多或少容易。我猜这个棘手的部分是顶部和底部。我会尝试以下。

您可以使用caretRect方法查找当前"框架"光标:

if let cursorPosition = answerTextView.selectedTextRange?.start {
    let caretPositionRect = answerTextView.caretRect(for: cursorPosition)


}

然后上下移动,我会使用该框架使用UITextView(或者characterRange(at:))计算closestPosition(to:)坐标中的估计位置,例如为了:

let yMiddle = caretPositionRect.origin.y + (caretPositionRect.height / 2)
let lineHeight = answerTextView.font?.lineHeight ?? caretPositionRect.height // default to caretPositionRect.height
// x does not change
let estimatedUpPoint = CGPoint(x: caretPositionRect.origin.x, y: yMiddle - lineHeight)
if let newSelection = answerTextView.characterRange(at: estimatedUpPoint) {
    // we have a new Range, lets just make sure it is not a selection
    newSelection.end = newSelection.start

    // and set it
    answerTextView.selectedTextRange = newSelection
} else {
    // I guess this happens if we go outside of the textView
}

我以前没有真正做到这一点,所以把它作为一个适合你的大方向。

使用的方法的文档是here