2017-04-26 4 views
1

Ich möchte den Speicherort des aktuellen Caret in UITextView als CGRect erhalten, aber es scheint keine Informationen zu geben. Selbst the official documentation kann ich mir nicht vorstellen, wie man diese Methode benutzt und die Erklärung findet. Jetzt konnte ich den Weg kennen, den Offset in UITextView zu bekommen, nicht CGRect. Aber ich möchte wirklich die CGRect kennen.So erhalten Sie den CGRect des aktuellen Caret

Alle Kommentare sollten sehr geschätzt werden. Danke.

+0

Es ist ziemlich unklar, was Sie fragen. Die Funktion in der Dokumentation, die Sie verknüpft haben, gibt bereits ein 'CGRect' zurück? – Oskar

+0

Sorry, meine Erklärung war nicht genug, aber wie lautet das Argument 'für Position: UITextPosition'? Was sollte ich über diese Methode weitergeben? In dem Sinne gibt es keine Messungen. Und jetzt experimentiere ich es. Aber weißt du es? –

+0

http://stackoverflow.com/questions/9126709/create-uitextrange-from-nsrange? Ist das wonach Sie suchen? Die mögliche Verbindung zwischen 'UITextPosition' und' UITextView'? – Larme

Antwort

1

Try this:

extension UITextView { 
    var caret: CGRect? { 
     guard let selectedTextRange = self.selectedTextRange else { return nil } 
     return self.caretRect(for: selectedTextRange.end) 
    } 
} 

und es wie folgt verwendet werden:

let textView: UITextView = ... 
if let caret = textView.caret { 
    // Do your thing here. 
} else { 
    // Caret is undefined. 
} 

By the way, waren Sie auf dem richtigen Weg :-) Die obige Lösung ist basierend auf der UITextInput Methode, die Sie gerade erwähnt haben:

func caretRect(for position: UITextPosition) -> CGRect 

ein Rechteck verwendet, um die Rück caret bei einer gegebenen Einfügepunkt zu ziehen.

Der Parameter UITextPosition repräsentiert eine Position in einem Textcontainer; mit anderen Worten, es ist ein Index in die Backing-Zeichenkette in einer Textanzeige.

+0

Danke. Mein Problem, das ich zu lösen versuchte, war bereits gelöst, aber ich bin immer noch unklar. Was ist in deinem letzten Satz genau ein "Textcontainer"? Und ich verstehe auch nicht die Bedeutung der "Backing String". Könntest du erklären? –

+0

@KazuyaTomita Die ** Backing-Zeichenkette ** speichert den tatsächlich angezeigten Text in der Textansicht * unabhängig * davon, wie der Text gerade auf dem Bildschirm angezeigt wird (z. B. Ansichtsbreite, Ansichtshöhe, Anzahl der Zeilen usw.) . Die 'UITextPosition' liefert eine Position/einen Index in diese Backing-Zeichenkette. Bsp .: Wenn die Textansicht breiter wird, wird sich das Textlayout wahrscheinlich mit weniger Zeilen ändern, * aber ein gegebener 'UITextPosition'-Index bleibt gleich. –

+0

Was meinst du mit Index? Ist es wie ein Array? Wie weisen Sie diese Indizes der von Ihnen erläuterten Backing-Zeichenfolge zu? –

-2
//rect is an object of CGRect 
var rect = TextView.frame 
+0

Ich möchte den 'CGRect' des Caret wissen. Es scheint nicht zu funktionieren. –

Verwandte Themen