以下內(nèi)容適用于UITextField和UITextView。
修改光標(biāo)的起始位置
/// 方法一
/// 此方法只會修改光標(biāo)的位置,不會更改placeholder的文案位置
text.setValue(NSNumber(value: 12), forKey: "paddingLeft")
/// 方法二
/// 此方法會同時修改光標(biāo)和placeholder的位置
let leftV = UIView(frame: CGRect(x: 0, y: 0, width: 8, height: 1))
text.leftView = leftV
text.leftViewMode = .always
有用的信息
文本字段文本的開頭:
let startPosition: UITextPosition = textField.beginningOfDocument
文本字段文本的最后:
let endPosition: UITextPosition = textField.endOfDocument
當(dāng)前選擇的范圍:
let selectedRange: UITextRange? = textField.selectedTextRange
獲取光標(biāo)位置
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
設(shè)置光標(biāo)位置
為了設(shè)置位置,所有這些方法實際上都是設(shè)置具有相同開始值和結(jié)束值的范圍。
到了開始
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
到最后
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
到當(dāng)前光標(biāo)位置左側(cè)的一個位置
// 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)
}
有關(guān)
選擇所有文字
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
選擇一系列文字
// Range: 3 to 7let 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!)
}
在當(dāng)前光標(biāo)位置插入文本
textField.insertText("Hello")
筆記
用于
textField.becomeFirstResponder()將焦點置于文本字段并使鍵盤顯示。有關(guān)如何在某個范圍內(nèi)獲取文本,請參閱此答案。