[SWIFT] So passen Sie TextPosition mit der iOS-Tastaturerweiterung an

Verwenden Sie "adjustTextPosition (byCharacterOffset: Int)", um den Cursor in der iOS-Tastaturerweiterung zu bewegen. Dokumentation ist perfekt

To move the insertion point in the text input view, use the adjustTextPosition(byCharacterOffset:) method. For example, if you want to implement a forward delete action, move the insertion position forward by one character then delete backwards:

// Move the text insertion position forward 1 character (Bewegen Sie sich ein Zeichen vorwärts)
textDocumentProxy.adjustTextPosition(byCharacterOffset: 1)

Es heißt, aber es ist eine ** Falle **. Ich denke, es ist schwer zu bemerken, also werde ich es teilen.

Wenn es auf diese Weise implementiert wird, verhält es sich so. ezgif-5-786edace6467.gif

Es funktioniert gut bis zu "aiueo", aber es scheint seltsam, wenn man Kanji und Piktogramme erreicht.

Lösungen

Anscheinend zählt diese Methode "ein Zeichen" nach der Anzahl der Zeichen, wenn "utf16" verwendet wird. Überprüfen wir also die Zeichen in Fahrtrichtung, bevor wir sie ausführen, und dann "adjustTextPosition".

func getActualOffset(count: Int)->Int{
    if count>0{
        if let after = textDocumentProxy.documentContextAfterInput{
            if after == ""{
                return 1   //Wenn vor einem Zeichen ein Zeilenumbruch steht, nach==""Wird sein.
            }
            let left = after.prefix(count)
            return left.utf16.count
        }else{
            return 1
        }
    }else if count<0{
        if let before = textDocumentProxy.documentContextBeforeInput{
            let right = before.suffix(-count)
            return -right.utf16.count
        }else{
            return -1
        }
    }else{
        return 0
    }
}

let offset = getActualOffset(count: 1) //Holen Sie sich den genauen Versatz
textDocumentProxy.adjustTextPosition(byCharacterOffset: offset) //Lauf

Dies funktioniert wie vorgesehen. ezgif-5-410ac0a2f5c8.gif

Bitte seien Sie vorsichtig, da es sich um eine Falle handelt, die an einem schwer zu erkennenden Ort versteckt ist.

Recommended Posts

So passen Sie TextPosition mit der iOS-Tastaturerweiterung an
Wie man mit html.erb nummeriert (nummeriert)
So aktualisieren Sie mit activerecord-import
[iOS] Wie man Karthago liest
Wie fange ich mit schlank an?
Wie man ein Zeichen mit "~" einschließt
Wie man mssql-tools mit alpine benutzt
So starten Sie Camunda mit Docker
So beschneiden Sie ein Bild in libGDX
So teilen Sie Dateien mit Docker Toolbox
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
[Android] Wie man mit dunklen Themen umgeht
Verwendung von BootStrap mit Play Framework
So wechseln Sie Miniaturbilder mit JavaScript
[Hinweis] Erste Schritte mit Rspec
API-basierte Steuerung mit cancancan
So erreichen Sie den Dateidownload mit Feign
So aktualisieren Sie verwandte Modelle mit accept_nested_attributes_for
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So implementieren Sie TextInputLayout mit Validierungsfunktion
So behandeln Sie Anmeldefehler mit devise
So löschen Sie Daten mit einem externen Schlüssel
So testen Sie den privaten Bereich mit JUnit
So überwachen Sie Nginx mit Docker-Compose mit Datadog
Benötigt für iOS 14? So legen Sie NSUserTrackingUsageDescription fest
Der Umgang mit dem Vorkompilieren von Assets ist fehlgeschlagen.
So erreichen Sie das Hochladen von Dateien mit Feign
So führen Sie Blazor (C #) mit Docker aus
So erstellen Sie eine Rails 6-Umgebung mit Docker
So laden Sie Oracle JDK 8 U / min mit Curl herunter
Wie man jeden Fall mit Mockito 1x verspottet
Wie man jeden Fall mit PowerMock + Mockito1x verspottet
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So speichern Sie mit einer Eingabe in mehreren Tabellen
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel
Verwendung des Java-Frameworks mit AWS Lambda! ??
So erstellen Sie mit ActiveHash mehrere Pulldown-Menüs
Verwendung der Java-API mit Lambda-Ausdrücken
Erste Schritte mit Eclipse Micro Profile
So geben Sie jemandem Ihr Image mit Docker
So fügen Sie mit MyBatis alles auf einmal ein
So schreiben Sie Testcode mit Basic-Zertifizierung
So erstellen Sie eine API mit GraphQL und Rails
Verwendung des NFS-Protokolls Version 2 mit Ubuntu 18.04
So löschen Sie eine Ressourcendatei mit Spring-Boot
So erstellen Sie Elementvariablen mit dem JPA-Modell
So überprüfen Sie variable Elemente mit RequestBodyMatching von WireMock
[Rails] So erstellen Sie eine Umgebung mit Docker