Poniższa treść dotyczy obu UITextField
i UITextView
.
Przydatna informacja
Sam początek tekstu pola tekstowego:
let startPosition: UITextPosition = textField.beginningOfDocument
Sam koniec tekstu pola tekstowego:
let endPosition: UITextPosition = textField.endOfDocument
Aktualnie wybrany zakres:
let selectedRange: UITextRange? = textField.selectedTextRange
Uzyskaj pozycję kursora
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
Ustaw pozycję kursora
Aby ustawić pozycję, wszystkie te metody w rzeczywistości ustawiają zakres z tymi samymi wartościami początkowymi i końcowymi.
Do początku
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Do końca
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Do jednej pozycji na lewo od aktualnej pozycji kursora
// 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)
}
}
Na dowolne stanowisko
Zacznij od początku i przesuń 5 znaków w prawo.
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
Związane z
Zaznacz cały tekst
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
Wybierz zakres tekstu
// 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!)
}
Wstaw tekst w bieżącej pozycji kursora
textField.insertText("Hello")
Uwagi
Służy textField.becomeFirstResponder()
do zaznaczania pola tekstowego i wyświetlania klawiatury.
Zobacz tę odpowiedź, aby dowiedzieć się, jak uzyskać tekst w pewnym zakresie.
Zobacz też
textField.endOfDocument
. Możesz również użyć podkreślenia lub spacji, aby przedstawić brakujące litery.w moim przypadku musiałem użyć DispatchQueue:
nic innego z tego i innych wątków nie działało.
PS: Dokładnie sprawdziłem, w którym wątku działa textViewDidBeginEditing i był to główny wątek, ponieważ cały interfejs użytkownika powinien działać, więc nie jestem pewien, dlaczego zadziałało to niewielkie opóźnienie przy użyciu main.asynch.
źródło
textViewDidBeginEditing
. Więc umieszczając go w kolejce, nastąpi to po zakończeniu dzwoniącego.Aby ustawić położenie kursora w miejscu:
Resetowanie pozycji kursora:
Uwaga : ten przykład działa zarówno w widoku tekstowym, jak i w polu tekstowym.
źródło
źródło