2012-03-11 10 views
10

Así que me gustaría detectar un toque en UIWebView si no está tocando en un enlace. ¿Cómo hago esto? Sé que:cómo detectar el tap en UIWebView si no es un enlace

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

se invoca cada vez que se hace clic en un enlace. Sin embargo, ¿cómo sé si se trata de un toque en UIWebView que no sea el enlace? He estado buscando la web y la más cercana que encontré es this. Sin embargo, eso no me dice si el grifo está en un enlace o no

Respuesta

0

Creo que el siguiente método debería funcionar teóricamente. Lo que podría hacer es envolver su UIWebView en un contenedor UIView y configurar sus reconocedores de gestos en la vista del contenedor. A continuación, los eventos táctiles que no se manejan con el UIWebView se pasarán por la jerarquía de vista y serán interceptados por su vista de contenedor.

En el contenedor UIView implemente los controladores apropiados & puede detectar los grifos. Espero que esto esté claro ...

Si este enfoque no está dando sus frutos, entonces podría ir a la ruta javascript. es decir, colocar eventos de JavaScript como carga de la página web &, está listo para funcionar. Ver aquí para más información - Does UIGestureRecognizer work on a UIWebView?

+2

problema es hacer clic en el enlace todavía desencadena el icono reconocedor del grifo gesto – xonegirlz

+0

peor es - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer se llama antes de que se ejecute la shouldStartLoadWithRequest – xonegirlz

+0

sí que va a suceder .en 'gestureRecognizer' tendrás que encontrar la forma de ignorar los gestos. –

1

Déjame explicarte por qué esto es imposible.

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
  1. Aunque suene habrá llamadas ridículos a este método delegado cuando el usuario ha hecho clic en un enlace con un tipo de navegación de UIWebViewNavigationTypeOther en lugar de UIWebViewNavigationTypeLinkClicked. Esto sucede con algunas páginas basadas en JavaScript que se encuentran comúnmente en Internet.

  2. Incluso si suena completamente loco, habrá llamadas a este método delegado con UIWebViewNavigationTypeLinkClicked varias veces cuando, de hecho, el usuario no ha hecho clic en un enlace. Algunos sitios web incrustan el contenido de un marco/iframe mediante un clic simulado en un botón oculto, lo que provoca varias llamadas con UIWebViewNavigationTypeLinkClicked.

    Esta forma extraña de incrustar contenido con un clic simulado se realiza para eludir las configuraciones de privacidad de ciertos navegadores. Google fue demandado por esto hace algún tiempo y tuvo que pagar varios millones de penalización, porque usaron este truco para establecer cookies en el navegador Safari incluso si el usuario ha configurado el navegador para no aceptar estas cookies .

lo tanto, si únicamente dependemos de método delegado de UIWebView obtendrá clics cuando no hay ninguno y ninguno cuando hay clics. Por lo tanto, en un entorno no controlado esto es imposible.

Pero, ¿qué estás tratando de hacer exactamente?

Cuestiones relacionadas