Ich habe eine textView, die auf eine TableView-Zelle geschichtet ist. Ich brauche den Benutzer, um auf die TableView-Zeile zu klicken, um einen ViewController zu öffnen, aber wenn der TextView einen Link hat, muss er anklickbar sein und das ist es, keine Kopie, Auswahl usw.
Wenn ich Benutzerinteraktion wie folgt erlaube:
%Vor% das didSelectRowAtIndexPath
wird nicht aufgerufen und ich verstehe warum, aber wie erreiche ich das?
BEARBEITEN:
Was ich suche, ist die Fähigkeit, den Link spezifisch zu identifizieren und dem Benutzer zu erlauben, auf den Link zu klicken, um einen Browser zu öffnen und die Interaktion für den Rest des textView zu deaktivieren. Auch die gesamte Zeile sollte wie oben erwähnt klickbar sein.
Angehängt ist das Bild meiner Tabellenansicht-Zellenzeile, das anzeigt, dass die Verbindung erkannt wurde und eine Interaktion möglich ist, aber dies deaktiviert% code% in der textView-Region.
Eine mögliche (und komplexe) Lösung wäre die Verwendung von UIView
s mit UITapGestureRecogniser
in Ihrem UITextView
.
Zuerst müssen Sie NSRange
Ihres Links finden.
Konvertiere NSRange
in UITextRange
Verwenden Sie einen ähnlichen Code wie den folgenden, um UITapGestureRecogniser
direkt über dem Link-Text in Ihrem UITextView
hinzuzufügen.
}
Was ich in diesem Code getan habe, ist die UITextRange
des relevanten Textes, es ist firstRectForRange
und eine transparente tap-fähige UIView
direkt darüber.
Sie müssten den Bereich Ihres Links mit regEx
ermitteln, ihn in UITextRange
konvertieren und über diesen die tap-fähige UIViews
hinzufügen. Falls in einem einzelnen textView
mehr als ein Link vorhanden sein sollte, fügen Sie tag
zu jeder Ansicht hinzu, die ihrem 'link' entspricht, und öffnen diesen Link in der Zielmethode, indem Sie dessen Tag überprüfen.
HINWEIS: Wenn Ihre UITextView
s universell nicht bearbeitet werden können, sollten Sie stattdessen TTTAttributedLabel
ausprobieren. Das mache ich in meinem UITableViewCells
Vielleicht ist es für Ihre Zwecke in Ordnung:
%Vor%Tatsächlich verwendet UITextView intern UIWebView-Teile, und das kann in Tabellenzellen langsam sein.
Ich kann empfehlen, CoreText
oder NSAttributedString
mit Berührungen zu verwenden. Zum Beispiel können Sie diese SO-Post .
Wenn Sie versuchen, ein UITextView mit Links zu einer Zelle hinzuzufügen, und möchten, dass didSelectRow aufgerufen wird, wenn der Benutzer auf etwas anderes als den Link tippt, sollten Sie hitTest: withEvent verwenden :
Swift 3
%Vor%Ich schrieb einen Artikel darüber mit ein bisschen mehr Details.
Tags und Links objective-c uitableview ios uitextview ios7