Taps in einem UIWebView erkennen

7

Ich habe eine UIWebView mit einer Navigationsleiste und Symbolleiste, die ich automatisch ausblenden möchte. Ich mache das schon, aber ich möchte sie zeigen, wenn der Benutzer auf UIWebView klickt.

Mein Problem ist, dass UIWebView alle Berührungen erfasst, und ich kann die, die ich brauche, nicht abfangen.

Gibt es eine Problemumgehung dafür?

    
pgb 08.09.2009, 21:12
quelle

8 Antworten

1

Die meisten Ansätze behandeln ein kompliziertes Paar von UIView und UIWebView Unterklassen und übersteuern -touchesBegan:withEvent: etc. Methoden.

Dieser JavaScript-basierte Ansatz fängt das Web-DOM selbst ab. und es scheint eine clevere Möglichkeit zu sein, den komplexeren Prozess zu umgehen. Ich habe es selbst nicht ausprobiert, aber ich bin neugierig auf die Ergebnisse, wenn Sie es versuchen.

    
Alex Reynolds 08.09.2009, 21:34
quelle
8

Entnommen aus einem Blogeintrag (lädt nicht, aber zum Glück ist es Google Cache" ) von Mithin Kumar

(Mithin, ich hoffe, es macht Ihnen nichts aus, wenn ich es hier veröffentliche; wenn Sie das tun, lassen Sie es mich bitte in den Kommentaren wissen und ich werde es entfernen.)

  

Kürzlich habe ich an einem Projekt gearbeitet, das die Erkennung von Tap und Events im UIWebView erfordert. Wir wollten herausfinden, auf welches HTML-Element der Benutzer in der UIWebView tippt und dann abhängig von dem geklopften Element eine Aktion ausführen sollte. Nach einigem Googeln fand ich heraus, dass die meisten Benutzer eine transparente UIView auf das UIWebView legen, die Touch-Methoden der UIResponder-Klasse neu implementieren (zB: -touchesBegan: withEvent :) und dann die Ereignisse an die UIWebView übergeben. Diese Methode wird im Detail erklärt hier . Es gibt mehrere Probleme mit der Methode.

     
  1. Kopieren / Auswahl funktioniert nicht mehr in UIWebView
  2.   
  3. Wir müssen eine Unterklasse von UIWebView erstellen, während Apple sagt, wir sollten es nicht unterklassen.
  4.   
  5. Viele andere UIWebView-Funktionen funktionieren nicht mehr.
  6.   

Wir haben schließlich herausgefunden, dass der richtige Weg für die Umsetzung darin besteht   Sub-Classing UIWindow und Re-Implementieren der -sendEvent: -Methode. Hier   ist, wie Sie es tun können. Erstellen Sie zuerst eine UIWindow-Unterklasse

%Vor%      

Beachten Sie, dass wir Variablen haben, die uns die UIView mitteilen, auf der   Erkennen Sie die Ereignisse und den Controller, der das Ereignis empfängt   Information. Implementieren Sie diese Klasse nun folgendermaßen:

%Vor%      

Implementieren Sie die sendEvent-Methode auf die obige Weise, und Sie können dann senden   Geben Sie die gewünschten Informationen an den Controller zurück.

     

Es gibt einige Dinge, die man beachten sollte. Stellen Sie sicher, in Ihrem   MainWindow.xib-Datei, das Fenster ist vom Typ TapDetectingWindow und nicht   UIWindow. Nur dann werden alle Ereignisse das oben genannte durchlaufen   sendEvent-Methode erneut implementiert. Stellen Sie außerdem sicher, dass Sie [super aufrufen   sendEvent: event] zuerst und dann machen Sie was Sie wollen.

     

Jetzt können Sie Ihr UIWebView in der Controller-Klasse in der   folgender Weg

%Vor%      

Denken Sie daran, dass Sie die Methode userDidTapWebView in Ihre schreiben müssen   Controller-Klasse. Dies ist die Methode, die aufgerufen wird, um zu senden   die Ereignisinformationen für die Controller-Klasse. In unserem Fall über uns   senden den Punkt in der UIWebView, auf den der Benutzer geklickt hat.

    
brian.clear 07.12.2009 13:11
quelle
7

Sie können sehr einfach einen UITapGestureRecognizer verwenden, um Tippgesten in einem UIWebView zu erkennen. Sie müssen jedoch eine UIGestureRecognizerDelegate-Methode implementieren, um die gleichzeitige Erkennung zu ermöglichen.

%Vor%     
Brody Robertson 20.03.2014 16:39
quelle
3

Ich hatte mehrere Probleme bei der Verwendung von brian.clears Antwort (kopiert von einem ausgestorbenen Post von Mithin Kumar ) in meinem iOS 5-7 , universal , Storyboard- basiert , total ARC Projekt, also musste ich einige Änderungen vornehmen. Ich verbesserte auch einige Dinge und machte es leichter zu verstehen (zumindest für mich). Wenn Sie Probleme haben, diese Antwort von 2009 zu verwenden, sollten Sie vielleicht mein Update versuchen. Detaillierte Anweisungen:

1. Erstellen Sie eine neue TapDetectingWindow-Klasse

TapDetectingWindow.h

%Vor%

TapDetectingWindow.m

%Vor%

2. Überprüfen Sie, ob in Ihrem App-Delegaten ein window deklariert ist

Sie sollten so etwas in YourAppDelegate.h haben. Ändern Sie nicht den Namen der Eigenschaft!

%Vor%

3. Überschreiben Sie die Eigenschaft window Ihres App-Delegaten

Genau so sollte das in YourAppDelegate.m sein. Ändern Sie auch nicht den Namen der Methode!

%Vor%

4. Setzen Sie das Delegate-Protokoll in Ihrem View-Controller

Achten Sie darauf, dass Sie das Protokoll zur Handhabung von Abzweigungen in Ihrem MainViewController.h

übernehmen %Vor%

5. Richten Sie das Fenster "Tap-Erkennung" ein und tippen Sie auf den Ereignishandler

Geben Sie Ihre Webansicht an (eigentlich sollte jede UIView funktionieren) und tippen Sie in der (void) viewDidLoad -Methode

Ihres View-Controllers auf den Ereignishandler %Vor%

6. Behandeln Sie das Tipp-Ereignis wie gewünscht

Implementieren Sie einfach die userDidTapView -Methode in Ihrem View-Controller

%Vor%     
cprcrack 23.10.2013 18:10
quelle
1

Ich bin mir der genauen Implementierungsdetails nicht sicher, aber Sie müssen UIWindow ableiten und sendEvent: überschreiben. Dann können Sie Tippereignisse erfassen und entsprechend behandeln, bevor sie in die Webansicht gelangen. Hoffe, das zeigt Ihnen in die richtige Richtung!

    
Michael Waterfall 28.09.2009 18:26
quelle
1

Erstellen Sie eine UIView Unterklasse, die den gesamten UIWebView enthält. Dann wird das Ereignis hitTest ausgelöst, wenn das Webview berührt wird. Hinweis: Legen Sie nichts außer dem WebView in den Container.

%Vor%

Überschreiben Sie dann das Ereignis hitTest:

%Vor%     
Sayeed S. Alam 13.12.2011 08:06
quelle
1

Ich habe alle oben genannten Methoden ohne Erfolg versucht. Bhupendras Antwort von Ссылка funktionierte perfekt für mich.

    
Adam W. Dennis 10.01.2014 15:10
quelle
0

Ein wesentlich einfacherer Ansatz seit iOS 3.2 ist die Verwendung eines UITapGestureRecognizer.

%Vor%     
DonnaLea 03.05.2012 00:46
quelle

Tags und Links