Vor Xcode 9 und iOS 11 hatte ich ein UITextView
in einem UITableViewCell
, das mehrere Links enthielt. Jeder Link funktionierte wie erwartet, seit dem Upgrade auf iOS 11 und Xcode 9 funktionieren die Links jedoch nicht mehr.
Die UITextView scheint keine Touch-Interaktion mit func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool
feuern zu erkennen.
Hat jemand anderes nach dem Upgrade dasselbe Problem gefunden?
Es stellte sich heraus, dass es schließlich kein Problem gab. Änderungen an der Art und Weise, wie UITextView auf Berührungen in iOS11 reagiert, bedeutet, dass das Klicken auf Links mehr von einem Drücken erfordert als nur von einem Tippen, das zuvor in iOS10 funktioniert hat. Ich denke, das könnte etwas damit zu tun haben, dass man in iOS11 nun Links drücken und ziehen kann, die auch Details der URL anzeigen. Daher wird eine festere Presse benötigt, damit die UITextView die angetippte Verbindung registriert.
Speziell in iOS 11.0 und 11.1 (nicht später in 11.2+, nicht früher in 10.x) wird textView(_:shouldInteractWith:in:interaction)
von UITextViewDelegate von einer Interaktion mit UILongPressGestureRecognizer
anstelle von UITapGestureRecognizer
aufgerufen.
Für diese beiden iOS-Versionen benötigt der Benutzer eine kleine Verzögerung, die lange auf anstatt auf tippen für eine native Interaktion mit UITextView-Links gedrückt wird.
Wenn der Rückruf für diese beiden iOS-Versionen selbst bei langem Drücken nicht aufgerufen wird, haben Sie wahrscheinlich mit Gestenerkennern zu tun gehabt, indem Sie Ihre UITextView-Klasse von der Unterklasse absetzen und gestureRecognizerShouldBegin(_)
überschreiben. um false
zurückzugeben, wenn dies nicht der Fall ist.
Hier ist ein Beispiel für eine schnelle partielle Problemumgehung für gestureRecognizerShouldBegin(_)
, die Lupe / Lupe lange drücken (wenn das die gewünschte Absicht der Überschreibung ist), aber trotzdem lange drücken auf Links:
Eine Alternative besteht darin, sowohl UILongPressGestureRecognizer
als auch UITapGestureRecognizer
vollständig zu verbieten, außer für einen selbst erstellten UITapGestureRecognizer, den Sie selbst erstellt hätten, um mit Links zu interagieren.
Tags und Links uitextview ios11