Следующее содержимое относится как к, так 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!)
}
Вставить текст в текущую позицию курсора
textField.insertText("Hello")
Ноты
Используйте, textField.becomeFirstResponder()
чтобы выделить текстовое поле и отобразить клавиатуру.
См. Этот ответ, чтобы узнать, как получить текст в некотором диапазоне.
Смотрите также
textField.endOfDocument
. Вы также можете использовать подчеркивания или пробелы для обозначения пропущенных букв.в моем случае мне пришлось использовать DispatchQueue:
больше ничего из этого и других потоков не работало.
PS: Я дважды проверил, в каком потоке работал textViewDidBeginEditing, и это был основной поток, так как весь пользовательский интерфейс должен работать, поэтому не уверен, почему эта небольшая задержка с использованием main.asynch сработала.
источник
textViewDidBeginEditing
. Таким образом, помещая его в очередь, это произойдет после того, как вызывающий абонент закончит.Чтобы установить положение курсора в вашей точке:
Для сброса позиции курсора:
Примечание . Этот пример работает как в Textview, так и в Textfield.
источник
источник