獲取和設定游標位置
有用的資訊
文字欄位文字的開頭:
let startPosition: UITextPosition = textField.beginningOfDocument
文字欄位文字的最後:
let endPosition: UITextPosition = textField.endOfDocument
當前選擇的範圍:
let selectedRange: UITextRange? = textField.selectedTextRange
獲取游標位置
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
設定游標位置
為了設定位置,所有這些方法實際上都設定了具有相同開始值和結束值的範圍。
到了開始
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRangeFromPosition(newPosition, toPosition: newPosition)
到最後
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRangeFromPosition(newPosition, toPosition: newPosition)
到當前游標位置左側的一個位置
// only if there is a currently selected range
if let selectedRange = textField.selectedTextRange {
// and only if the new position is valid
if let newPosition = textField.positionFromPosition(selectedRange.start, inDirection: UITextLayoutDirection.Left, offset: 1) {
// set the new position
textField.selectedTextRange = textField.textRangeFromPosition(newPosition, toPosition: newPosition)
}
}
到任意位置
從頭開始,向右移動 5 個字元。
let arbitraryValue: Int = 5
if let newPosition = textField.positionFromPosition(textField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRangeFromPosition(newPosition, toPosition: newPosition)
}
有關
選擇所有文字
textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)
選擇一系列文字
// Range: 3 to 7
let startPosition = textField.positionFromPosition(textField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 3)
let endPosition = textField.positionFromPosition(textField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 7)
if startPosition != nil && endPosition != nil {
textField.selectedTextRange = textField.textRangeFromPosition(startPosition!, toPosition: endPosition!)
}
在當前游標位置插入文字
textField.insertText("Hello")
筆記
-
此示例最初來自此 Stack Overflow 答案 。
-
這個答案使用文字欄位,但相同的概念適用於
UITextView
。 -
使用
textField.becomeFirstResponder()
將焦點置於文字欄位並使鍵盤顯示。 -
有關如何在某個範圍內獲取文字,請參閱此答案 。
有關
- 如何在 Swift 中建立一個範圍 (間接地解決為什麼我們必須在這裡使用
selectedTextRange
而不僅僅是selectedRange
)