這個答案已經更新了斯威夫特3
以下內容適用於UITextField
和UITextView
。
有用信息
文本字段中的文本的最開始的時候:
let startPosition: UITextPosition = textField.beginningOfDocument
文本字段中的文本的最末端:
let endPosition: UITextPosition = textField.endOfDocument
當前選定範圍:
let selectedRange: UITextRange? = textField.selectedTextRange
獲取光標位置
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
設置光標位置
爲了設置的位置,所有的這些方法實際上是設置具有相同的開始和結束值的範圍。
要開始
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
向該端
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: 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.position(from: selectedRange.start, offset: -1) {
// set the new position
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
}
到任意位置
從開始處開始,向右移動5個字符。
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
相關
選擇所有文字
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
選擇文本範圍
// Range: 3 to 7
let startPosition = textField.position(from: textField.beginningOfDocument, offset: 3)
let endPosition = textField.position(from: textField.beginningOfDocument, offset: 7)
if startPosition != nil && endPosition != nil {
textField.selectedTextRange = textField.textRange(from: startPosition!, to: endPosition!)
}
在當前光標positio 插入文本ñ
textField.insertText("Hello")
注
也
startPosition的目的是什麼?你可以用它做什麼?此外,可能需要獲取光標位置的目的是什麼? – Honey
@Honey,我用這個變量名來引用兩個不同的東西。首先是參考文本字段的開頭。如果你想在那裏移動光標,這將是有用的。第二個是指乞討選定範圍的文本。如果您想要複製該範圍或在其上設置某個屬性,這很有用。 – Suragch
當textfield爲空時,是否有任何東西將光標移動到右側?我遵循你的回答,但我無法做到。 –