UIWebview eliminar toque para enfocar

Un UIWebView normalmente se centra en el contenido seleccionado cuando presiono dos veces parte de un website, y ahora quiero que el UIWebView ignore el doble toque, pero aún así pueda interactuar con él.

¿Cómo haría esto?

Double Tap es reconocido por UITapGestureRecognizer. Pase por la jerarquía de la vista si realmente quiere esto. Un poco complicado, pero debería funcionar.

Los códigos se ven así:

- (void)goThroughSubViewFrom:(UIView *)view { for (UIView *v in [view subviews]) { if (v != view) { [self goThroughSubViewFrom:v]; } } for (UIGestureRecognizer *reco in [view gestureRecognizers]) { if ([reco isKindOfClass:[UITapGestureRecognizer class]]) { if ([(UITapGestureRecognizer *)reco numberOfTapsRequinetworking] == 2) { [view removeGestureRecognizer:reco]; } } } } 

He puesto una demo aquí: NoDoubleTapWebView

Espero eso ayude.

iOS 5.0 o superior:

Un UIWebView contiene un UIScrollView para mostrar su contenido y es accesible por la propiedad UIWebView de UIWebView . Entonces, una posible forma de hacerlo es subclass UIScrollView y override -touchesShouldBegin:withEvent:inContentView . Puede get el número de UITouch un object UITouch de su propiedad tapCount , que puede usarse para filtrar los gestos de doble toque y, de lo contrario, llamar al método súper. Esto se vería como:

 -(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view { UITouch * touch = [touches anyObject]; //Get a touch object if (2 == touch.tapCount) { //If this is a double-tap... return NO; //...don't begin touches } else { //Otherwise, call the superclass' implementation return YES; } } 

Sin embargo, para configurar la vista de desplazamiento de la vista web como su subclass personalizada, es posible que también tenga que subclass UIWebView (que generalmente está mal visto). Dicho esto, es probable que funcione para subclass UIWebView y networkingefinir la propiedad scrollView . En el file de interfaz:

 @interface MyAwesomeWebView : UIWebView { } @property (nonatomic, readonly, retain) MyAwesomeScrollView * scrollView; @end 

Y en el file de implementación:

 @implementation @dynamic scrollView @end 

Sin embargo, proceda con precaución.

Pre iOS 5.0:

Como Alan Moore escribió en los comentarios, puede agregar una vista transparente en la parte superior de la vista web, capturar todos los events táctiles con testings de éxito y reenviar los events táctiles a la vista web a less que haya un toque doble.

EDITAR: respuesta actualizada para include advertencias sobre la subclass UIWebView, etc. EDIT 2: segunda respuesta incluida para pre iOS 5.0

Creo que la forma de hacerlo es agregar un UITapGestureRecognizer en la parte superior de su UIWebView, luego puede filtrar los dobles toques como desee.

Puedes encontrar ejemplo de código / discusión aquí:

Agregue un UITapGestureRecognizer a una UIWebView