Wie abfangen, klicken Sie auf den 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 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.
Cool! Ich habe die vorgeschlagene änderung. Prost!
Man könnte auch kategorisieren
UIApplication
und ersetzen Sie die openURL-Umsetzung. Obwohl auf diese Weise ist es schwierig (aber nicht unmöglich) mit einem Verweis auf die original-Implementierung.FYI - ich habe eine BrowserViewController auf GitHub, die vollständig implementiert diese, sowie die Unterstützung von links geklickt aus in einem UIWebView hier: github.com/nbuggia/Browser-View-Controller--iPhone-.
Dies scheint nur zu funktionieren für web-links, nicht autoformatted Telefonnummern.
InformationsquelleAutor 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:
Leider werden Sie noch am Ende mit
UIWebView
wenn Sie wollen, um einige andere text das link und nicht die URL selbst. Die<a>
tag ist immer noch der beste Weg zu gehen.Dies sollte die akzeptierte Antwort.
Im Falle dass andere Menschen das sehen, können Sie jetzt einige andere text den link.
InformationsquelleAutor Rajan Balana
Für Swift 3
oder, wenn das Ziel ist, >= IOS 10
InformationsquelleAutor Ryan Heitner
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 Esqarrouth
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 Imanou Petit
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 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 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 A. Jesse Jiryu Davis
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
Denke, das hat eine Reihe von Fragen, wie was passiert, wenn man nicht auf einen link Tippen. Also ich glaube nicht, dass die text-Ansicht werden in der Regel arbeiten mehr, da null zurückgegeben wird. Die Auswahl wird sich auch ändern, wenn Sie auf einen link Tippen, weil in diesem Fall, selbst zurückgegeben.
funktioniert großartig für mich, Sie müssen, um solche Fälle für Ihre Bedürfnisse
schwach var linkDetectDelegate: QuickDetectLinkTextViewDelegate?
Funktioniert nicht richtig -
hitTest
wird zweimal aufgerufenInformationsquelleAutor Josh O'Connor