O conteúdo a seguir se aplica a ambos UITextField
e UITextView
.
Informação útil
O início do texto do campo de texto:
let startPosition: UITextPosition = textField.beginningOfDocument
O final do texto do campo de texto:
let endPosition: UITextPosition = textField.endOfDocument
O intervalo atualmente selecionado:
let selectedRange: UITextRange? = textField.selectedTextRange
Obter a posição do cursor
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
Definir a posição do cursor
Para definir a posição, todos esses métodos estão, na verdade, definindo um intervalo com os mesmos valores inicial e final.
Para o início
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Até o fim
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Para uma posição à esquerda da posição atual do cursor
// 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)
}
}
Para uma posição arbitrária
Comece no início e mova 5 caracteres para a direita.
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
Relacionados
Selecione todo o texto
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
Selecione um intervalo de texto
// 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!)
}
Insere texto na posição atual do cursor
textField.insertText("Hello")
Notas
Veja também
textField.endOfDocument
. Você também pode usar sublinhados ou espaços para representar as letras que faltam.no meu caso, tive que usar DispatchQueue:
nada mais deste e de outros tópicos funcionou.
PS: Eu verifiquei em qual thread textViewDidBeginEditing estava sendo executado, e era o thread principal, já que toda a IU deve ser executada, então não tenho certeza de por que aquele pequeno atraso usando main.asynch funcionou.
fonte
textViewDidBeginEditing
. Portanto, ao colocá-lo na fila, isso acontecerá depois que o chamador terminar.Para definir a posição do cursor no seu ponto:
Para redefinir a posição do cursor:
Nota : Este exemplo funciona em Textview e Textfield.
fonte
fonte