獲取和設定游標帖子

有用的資訊

文字欄位文字的開頭:

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() 將焦點置於文字欄位並使鍵盤顯示。

  • 有關如何在某個範圍內獲取文字,請參閱此答案

有關