获取和设置光标帖子

有用的信息

文本字段文本的开头:

let startPosition: UITextPosition = textView.beginningOfDocument

文本字段文本的最后:

let endPosition: UITextPosition = textView.endOfDocument

当前选择的范围:

let selectedRange: UITextRange? = textView.selectedTextRange

获取光标位置

if let selectedRange = textView.selectedTextRange {
    
    let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
    
    print("\(cursorPosition)")
}

设置光标位置

为了设置位置,所有这些方法实际上都设置了具有相同开始值和结束值的范围。

到了开始

let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

到最后

let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

到当前光标位置左侧的一个位置

// only if there is a currently selected range
if let selectedRange = textView.selectedTextRange {
    
    // and only if the new position is valid
    if let newPosition = textView.positionFromPosition(selectedRange.start, inDirection: UITextLayoutDirection.Left, offset: 1) {
        
        // set the new position
        textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
    }
}

到任意位置

从头开始,向右移动 5 个字符。

let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
    
    textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}

有关

选择所有文字

textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)

选择一系列文字

// Range: 3 to 7
let startPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 3)
let endPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 7)

if startPosition != nil && endPosition != nil {
    textView.selectedTextRange = textView.textRangeFromPosition(startPosition!, toPosition: endPosition!)
}

在当前光标位置插入文本

textView.insertText("Hello")

笔记

  • 此示例最初来自此 Stack Overflow 答案的改编。

  • 这个答案使用文本字段,但相同的概念适用于 UITextView

  • 使用 textView.becomeFirstResponder() 将焦点置于文本字段并使键盘显示。

  • 有关如何在某个范围内获取文本,请参阅此答案

有关