2017-11-10 5 views
0

Meine Funktion möchte die aktuelle Position des Cursors in textview bekommen, aber wenn ich die Zeichenfolge "" (Cursor ist auf der letzten Position) in textview und es zurückgeben Bereich (0,6) und aktuelle Index als 6, erwartete Position 3, Bitte lassen Sie mich wissen, ob eine Möglichkeit Cursorpositionios textView.selectedTextRange gibt den falschen Bereich für die Textansicht mit Emojis ein

func getcurserforTextView(textView : UITextView) -> Int { 

    var cursorPosition = 0 

    if let selectedRange = textView.selectedTextRange { 

     cursorPosition = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start) 
    } 
    return cursorPosition 
} 

Antwort

0

die selectedRange und offset(from:to:) Werte für den Text in der Textansicht auf die UTF-16-Zeichen werden zu bekommen basiert . Daher ist das Ergebnis von 6 für diese Zeichenfolge korrekt, da diese Zeichenfolge 6 Zeichen enthält, wenn die UTF-16-Zeichencodierung verwendet wird.

Je nachdem, was Sie mit der erhaltenen Cursorposition machen, müssen Sie diesen UTF-16-Offset möglicherweise in einen "normalen" String Index konvertieren.

Bitte sehen Sie Converting scanLocation from utf16 units to character index in NSScanner (Swift), die eine ähnliche Situation und eine Möglichkeit zur Durchführung der Konvertierung abdeckt.

+0

danke für die antwort, aber ich brauche cursor position in textview mit UTF16 zeichen, können sie bitte helfen, aktuelle antwort geben nur insgesamt zeichen – user3395433

+0

Sie haben meine antwort nicht gelesen und schauen sie auf den von mir bereitgestellten link. – rmaddy

+0

Ihre Antwort ist korrekt in Bezug auf Zeichenfolge und NSString, aber ich will Funktion, um mich courser Index zu erhalten, Danke für Erklärung – user3395433

Verwandte Themen