Этот ответ был обновлен для Swift 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")
Примечания
textField.becomeFirstResponder()
Используйте, чтобы передать фокус в текстовое поле и сделать клавиатуру появляются.
См. this answer, как получить текст в каком-либо диапазоне.
Смотрите также
Какова цель startPosition? Что ты можешь сделать с этим? И какова цель, которая может потребоваться для получения позиции курсора? – Honey
@Honey, я использовал это имя переменной для обозначения двух разных вещей здесь. Первый - это ссылка на начало текстового поля. Было бы полезно, если бы вы хотели переместить туда курсор. Второе - это обращение к попрошайничеству выбранного диапазона текста. Это полезно, если вы хотите скопировать этот диапазон или установить на нем некоторый атрибут. – Suragch
Есть ли что-нибудь, чтобы переместить курсор вправо, пока текстовое поле пуст? Я последовал твоему ответу, но я не мог этого сделать. –