Ta odpowiedź została zaktualizowana do Swift 3
Poniższa treść dotyczy zarówno UITextField
i UITextView
.
Przydatne informacje
Prapoczątki tekstu pola tekstowego:
let startPosition: UITextPosition = textField.beginningOfDocument
samym końcu tekstu pola tekstowego:
let endPosition: UITextPosition = textField.endOfDocument
Aktualnie wybrany zakres:
let selectedRange: UITextRange? = textField.selectedTextRange
Get pozycji kursora
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
pozycję Ustaw kursor
W celu ustalenia pozycji, wszystkie te metody są rzeczywiście ustawienie szeregu z takimi 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 bieżącej 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)
}
pokrewne
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 na obecnym kursora positio n
textField.insertText("Hello")
Uwagi
Zastosowanie textField.becomeFirstResponder()
dać skupienie pola tekstowego i uczynić pojawi się klawiatura.
Aby uzyskać tekst w pewnym zakresie, patrz: this answer.
Zobacz także
Jaki jest cel startPosition? Co możesz z tym zrobić? Jaki jest cel, który może być potrzebny do uzyskania pozycji kursora? – Honey
@ Kochanie, użyłem tej nazwy zmiennej, aby odnieść się do dwóch różnych rzeczy tutaj. Pierwsza miała odnosić się do początku pola tekstowego. Byłoby użyteczne, gdybyś chciał tam przenieść kursor. Drugim było odwołanie się do początku wybranego zakresu tekstu. Jest to przydatne, jeśli chcesz skopiować ten zakres lub ustawić na nim jakiś atrybut. – Suragch
Czy jest coś, aby przesunąć kursor w prawo, gdy pole tekstowe jest puste? Poszłam za twoją odpowiedzią, ale nie mogłam tego zrobić. –