Wie lässt sich ein UITextView Link-Teil im Text erkennen und trotzdem userInteractionDisabled haben?

8

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.

    
Atif Imran 09.01.2014, 08:27
quelle

3 Antworten

2

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.

    %Vor%

    }

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

    
n00bProgrammer 09.01.2014 10:19
quelle
0

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 .     

Alex Nazaroff 09.01.2014 10:26
quelle
0

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.

    
Saoud Rizwan 18.01.2017 08:42
quelle