Wie abzufangen klicken auf Link in UITextView?
Ist es möglich, führen Sie benutzerdefinierte Aktion aus, wenn der Benutzer berühren erkannt werden kann Telefon link in UITextView. Bitte keine Ratschläge zu verwenden UIWebView statt.
Und bitte nicht nur text wiederholen von apple-Klassen-Referenz
- sicherlich habe ich auch schon gelesen.
Dank.
InformationsquelleAutor der Frage Vladimir | 2010-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update: Aus ios10
Aus der ios7 und Später
UITextView
hat die delegate-Methode:abfangen der Klicks auf links. Und dies ist der beste Weg, es zu tun.
IOS 6 und früher ein schöner Weg, dies zu tun ist, indem bilden von Unterklassen
UIApplication
und überschreiben der-(BOOL)openURL:(NSURL *)url
Müssen Sie implementieren
openURL:
in Ihrer Stellvertretung.Nun die Anwendung starten Sie mit Ihrem neuen Unterklasse von
UIApplication
suchen Sie die Datei main.m in Ihrem Projekt. In dieser kleinen Datei, startet Ihr die app, es ist in der Regel diese Zeile:Der Dritte parameter ist der name der Klasse für Ihre Anwendung. So, ersetzen Sie diese Zeile für:
Diese hat den trick für mich.
InformationsquelleAutor der Antwort fsaint
In iOS 7 oder Später
Können Sie die folgenden UITextView delegieren Methode:
Die text-Ansicht ruft diese Methode auf, wenn der Benutzer tippt oder lange drückt den URL-link. - Implementierung dieser Methode ist optional. Standardmäßig ist die text-Ansicht öffnet die Anwendung, die verantwortlich für den Umgang mit den URL-Typ und übergibt ihm die URL. Sie können diese Methode verwenden, um die trigger eine alternative Aktion, wie das anzeigen der web-Inhalte in der URL in einem web-Ansicht innerhalb der aktuellen Anwendung.
Wichtig:
InformationsquelleAutor der Antwort Rajan Balana
Swift version:
Ihre standard-UITextView-setup sollte in etwa so Aussehen, vergessen Sie nicht, die Delegierten und dataDetectorTypes.
Nachdem Ihre Klasse endet, fügen Sie dieses Stück:
InformationsquelleAutor der Antwort Esqarrouth
Für Swift 3
oder, wenn das Ziel ist, >= IOS 10
InformationsquelleAutor der Antwort Ryan Heitner
Swift 3 und i0S 10, der einfachste Weg zum interagieren mit Telefonnummern, urls oder Adressen in
UITextView
ist die VerwendungUIDataDetectorTypes
. Der code unten zeigt, wie eine Telefonnummer in einemUITextView
so dass der Benutzer mit ihm interagieren können.Mit diesem code, beim Klick auf die Telefonnummer, ein
UIAlertController
pop-up.Als alternative, können Sie
NSAttributedString
:Mit diesem code, wenn Sie auf der attributierten string, ein
UIAlertController
pop-up.Jedoch möglicherweise möchten Sie einige benutzerdefinierte Aktion anstelle einer
UIAlertController
pop-up, wenn Sie klicken Sie auf eine Telefonnummer. Oder möchten Sie vielleicht zu haltenUIAlertController
pop-up und führen Sie Ihre eigenen benutzerdefinierten Aktion in der gleichen Zeit.In beiden Fällen werden Sie haben, um Ihren
UIViewController
entsprechenUITextViewDelegate
Protokoll und implementierentextView(_:shouldInteractWith:in:Wechselwirkung:)
. Der code unten zeigt, wie es zu tun.Mit diesem code, beim Klick auf die Telefonnummer, keine
UIAlertController
wird pop-up und Sie erhalten stattdessen die folgenden print in der Konsole:InformationsquelleAutor der Antwort Imanou Petit
Habe ich dynamische Inhalte in text-Ansicht , welche enthalten link. Die shouldInteractWithURL wird immer nur aufgerufen, wenn der Benutzer langes drücken auf link, aber nicht aufrufen auf Tippen Sie auf link. Bitte umleiten, wenn jeder Kumpel hat Referenz darauf.
Folgenden ist einige der code sniped.
Den oben genannten delegate-Methode ist nicht immer genannt auf Tippen Sie auf.
Grüße,
Rohit Jankar
InformationsquelleAutor der Antwort Rohit
Swift 4:
1) Erstellen Sie die folgende Klasse (Unterklasse UITextView):
2) Wohin richten Sie Ihre textview, tun Sie Folgendes:
Wenn Sie mit storyboard, stellen Sie sicher, dass Ihre textview sieht im rechten Bereich identity-Inspektor:
Voila! Jetzt bekommen Sie den link Tippen sofort statt, wenn die URL shouldInteractWith URL-Methode
InformationsquelleAutor der Antwort Josh O'Connor
Ich habe nicht versucht es selber, aber Sie können versuchen, zu implementieren
application:handleOpenURL:
Methode in Ihrer Anwendung zu delegieren - es sieht aus wie alleopenURL
Anforderung übergeben durch diesen Rückruf.InformationsquelleAutor der Antwort Vladimir
Nicht sicher, wie Sie Sie würden Sie abfangen, die ermittelten Daten link, oder welche Art von Funktion, die Sie ausführen müssen. Aber Sie können in der Lage sein zu nutzen, um die didBeginEditing TextField-Methode ausführen ein test - /scan durch die textfield-wenn Sie wissen, was Sie suchen..wie das vergleichen von text-strings, die treffen ###-###-#### format, oder beginnen mit "www." schnappen Sie sich diese Felder, aber Sie würde schreiben müssen, ein wenig code zu schnüffeln durch den Textfeldern string, reconize, was Sie brauchen, und extrahieren Sie es für Ihre Funktion verwenden. Ich glaube nicht, das wäre so schwierig, sobald Sie verengt, was es genau ist, das Sie wollten, und dann fokussiert deine wenn () - Anweisung Filter nach unten zu sehr bestimmte übereinstimmende Muster, was man brauchte.
Natürlich impliziert dies, dass der Benutzer berühren Sie das Textfeld, um zu aktivieren die didBeginEditing(). Ist das nicht der Typ von user-Interaktion, die Sie gesucht haben, konnte man nur einen trigger verwenden Timer, der startet auf ViewDidAppear() oder andere je nach Notwendigkeit und führt durch die Felder mit Sternchen string, der dann am Ende führen Sie durch die textfield string-Methoden, die Sie erstellt haben, die Sie gerade drehen Sie den Timer wieder aus.
InformationsquelleAutor der Antwort Newbyman
application:handleOpenURL:
wird aufgerufen, wenn eine andere app öffnet Ihre app durch öffnen Sie eine URL mit einem Schema, die Ihre app unterstützt. Es ist nicht aufgerufen, wenn die app beginnt das öffnen einer URL.Ich denke der einzige Weg das zu tun, was Wladimir will, ist die Verwendung einer UIWebView statt einer UITextView. Machen Sie Ihre view-controller implementieren UIWebViewDelegate, legen Sie die UIWebView die Delegierten auf den view-controller und im view-controller implementieren
webView:shouldStartLoadWithRequest:navigationType:
zu öffnen[request URL]
im Blick, anstatt aufzugeben, Ihre app und öffnen Sie es in Mobile Safari.InformationsquelleAutor der Antwort A. Jesse Jiryu Davis