Ich habe eine, UITextView
die eine anzeigt NSAttributedString
. Diese Zeichenfolge enthält Wörter, die ich tippbar machen möchte, sodass ich beim Tippen zurückgerufen werde, damit ich eine Aktion ausführen kann. Mir ist klar, dass UITextView
das Abhören einer URL erkannt und mein Delegat zurückgerufen werden kann, aber dies sind keine URLs.
Es scheint mir, dass dies mit iOS 7 und der Leistungsfähigkeit von TextKit jetzt möglich sein sollte, ich kann jedoch keine Beispiele finden und bin mir nicht sicher, wo ich anfangen soll.
Ich verstehe, dass es jetzt möglich ist, benutzerdefinierte Attribute in der Zeichenfolge zu erstellen (obwohl ich dies noch nicht getan habe), und vielleicht sind diese nützlich, um festzustellen, ob eines der magischen Wörter getippt wurde? Auf jeden Fall weiß ich immer noch nicht, wie ich diesen Tipp abfangen und erkennen soll, bei welchem Wort der Tipp aufgetreten ist.
Beachten Sie, dass keine iOS 6-Kompatibilität erforderlich ist.
quelle
Erkennen von Abgriffen auf zugeordneten Text mit Swift
Manchmal ist es für Anfänger etwas schwierig zu wissen, wie man Dinge einrichtet (es war sowieso für mich), daher ist dieses Beispiel etwas ausführlicher.
Fügen Sie
UITextView
Ihrem Projekt ein hinzu.Auslauf
Schließen Sie das
UITextView
an dieViewController
mit einem benannten AuslasstextView
.Benutzerdefiniertes Attribut
Wir werden ein benutzerdefiniertes Attribut erstellen, indem wir eine Erweiterung erstellen .
Fügen Sie eine neue schnelle Datei mit Datei> Neu> Datei ...> iOS> Quelle> Schnelle Datei hinzu . Sie können es so nennen, wie Sie wollen. Ich rufe meinen NSAttributedStringKey + CustomAttribute.swift auf .
Fügen Sie den folgenden Code ein:
Code
Ersetzen Sie den Code in ViewController.swift durch den folgenden. Beachten Sie die
UIGestureRecognizerDelegate
.Wenn Sie nun auf das "w" von "Swift" tippen, sollten Sie das folgende Ergebnis erhalten:
Anmerkungen
NSAttributedString.Key.foregroundColor
(Textfarbe) sein können, das einen Wert von hatUIColor.green
.Weitere Studie
Diese Antwort basierte auf mehreren anderen Antworten auf diese Frage. Daneben siehe auch
quelle
myTextView.textStorage
anstelle vonmyTextView.attributedText.string
Dies ist eine leicht modifizierte Version, die auf der Antwort von @tarmes aufbaut. Ich konnte die
value
Variable nicht dazu bringen , etwas zurückzugeben, außernull
ohne die Optimierung unten. Außerdem musste das vollständige Attributwörterbuch zurückgegeben werden, um die resultierende Aktion zu bestimmen. Ich hätte dies in die Kommentare aufgenommen, habe aber anscheinend nicht den Repräsentanten, der dies tut. Entschuldigung im Voraus, wenn ich gegen das Protokoll verstoßen habe.Spezifische Optimierung ist
textView.textStorage
anstelle von zu verwendentextView.attributedText
. Als noch lernender iOS-Programmierer bin ich mir nicht sicher, warum das so ist, aber vielleicht kann uns jemand anderes aufklären.Spezifische Änderung der Tap-Handhabungsmethode:
Vollständiger Code in meinem View Controller
quelle
Mit iOS 7 ist es viel einfacher geworden, benutzerdefinierte Links zu erstellen und das zu tun, was Sie möchten. Bei Ray Wenderlich gibt es ein sehr gutes Beispiel
quelle
UITextView
Links nicht erkannt habe, obwohl ich sie so eingestellt hatte, dass sie über IB erkannt werden. (Ich hatte es auch nichtWWDC 2013 Beispiel :
quelle
Ich konnte dies ziemlich einfach mit NSLinkAttributeName lösen
Swift 2
quelle
if URL.scheme == "cs"
undreturn true
außerhalb derif
Anweisung, damit dieUITextView
normalenhttps://
Links, die getippt werden, verarbeitet werden könnenVollständiges Beispiel zum Erkennen von Aktionen für zugeordneten Text mit Swift 3
Anschließend können Sie die Aktion mit der
shouldInteractWith URL
UITextViewDelegate-Delegatmethode abfangen. Stellen Sie daher sicher, dass Sie den Delegaten ordnungsgemäß festgelegt haben.Ebenso können Sie jede Aktion entsprechend Ihren Anforderungen ausführen.
Prost!!
quelle
Das ist möglich mit
characterIndexForPoint:inTextContainer:fractionOfDistanceBetweenInsertionPoints:
. Es wird etwas anders funktionieren als Sie wollten - Sie müssen testen, ob ein getippter Charakter zu einem Zauberwort gehört . Aber es sollte nicht kompliziert sein.Übrigens empfehle ich dringend, Introducing Text Kit von WWDC 2013 anzusehen.
quelle
Mit Swift 5 und iOS 12 können Sie eine Unterklasse von TextKit-Implementierungen erstellen
UITextView
und diese überschreibenpoint(inside:with:)
, um nur einigeNSAttributedStrings
davon abrufbar zu machen .Der folgende Code zeigt, wie Sie eine erstellen
UITextView
, die nur auf das Tippen auf unterstricheneNSAttributedString
s reagiert :InteractiveUnderlinedTextView.swift
ViewController.swift
quelle
Dieser funktioniert möglicherweise in Ordnung mit einem kurzen Link, einem Multilink in einer Textansicht. Es funktioniert gut mit iOS 6,7,8.
quelle
Verwenden Sie diese Erweiterung für Swift:
Fügen Sie
UITapGestureRecognizer
Ihrer Textansicht mit der folgenden Auswahl hinzu:quelle