以下内容适用于UITextField
和UITextView
。
修改光标的起始位置
/// 方法一
/// 此方法只会修改光标的位置,不会更改placeholder的文案位置
text.setValue(NSNumber(value: 12), forKey: "paddingLeft")
/// 方法二
/// 此方法会同时修改光标和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
当前选择的范围:
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 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!)
}
在当前光标位置插入文本
textField.insertText("Hello")
笔记
-
用于
textField.becomeFirstResponder()
将焦点置于文本字段并使键盘显示。 -
有关如何在某个范围内获取文本,请参阅此答案。
网友评论