Der folgende Inhalt gilt sowohl für UITextField
als auch UITextView
.
Nützliche Informationen
Ganz am Anfang des Textfeldtextes:
let startPosition: UITextPosition = textField.beginningOfDocument
Ganz am Ende des Textfeldtextes:
let endPosition: UITextPosition = textField.endOfDocument
Der aktuell ausgewählte Bereich:
let selectedRange: UITextRange? = textField.selectedTextRange
Cursorposition abrufen
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
Cursorposition einstellen
Um die Position festzulegen, legen alle diese Methoden tatsächlich einen Bereich mit denselben Start- und Endwerten fest.
Zu Beginn
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Bis zum Ende
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
An eine Position links von der aktuellen Cursorposition
// 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)
}
}
Zu einer beliebigen Position
Beginnen Sie am Anfang und bewegen Sie 5 Zeichen nach rechts.
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
verbunden
Wählen Sie den gesamten Text aus
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
Wählen Sie einen Textbereich aus
// 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!)
}
Fügen Sie Text an der aktuellen Cursorposition ein
textField.insertText("Hello")
Anmerkungen
Verwenden Sie textField.becomeFirstResponder()
diese Option, um das Textfeld zu fokussieren und die Tastatur anzuzeigen.
In dieser Antwort erfahren Sie, wie Sie den Text in einem bestimmten Bereich abrufen können.
Siehe auch
textField.endOfDocument
. Sie können auch Unterstriche oder Leerzeichen verwenden, um die fehlenden Buchstaben darzustellen.In meinem Fall musste ich DispatchQueue verwenden:
nichts anderes von diesem und anderen Threads hat funktioniert.
PS: Ich habe zweimal überprüft, auf welchem Thread textViewDidBeginEditing ausgeführt wurde, und es war Hauptthread, da alle Benutzeroberflächen ausgeführt werden sollten. Daher bin ich mir nicht sicher, warum diese kleine Verzögerung mit main.asynch funktioniert hat.
quelle
textViewDidBeginEditing
. Wenn Sie es also in die Warteschlange stellen, geschieht dies, nachdem der Anrufer fertig ist.Zum Einstellen der Cursorposition an Ihrem Punkt:
Zum Zurücksetzen der Cursorposition:
Hinweis : Dieses Beispiel funktioniert sowohl in Textansicht als auch in Textfeld.
quelle
quelle