2011-08-23 22 views
11

¿Cómo puedo desactivar la lupa que aparece cuando mantienes pulsado un UIWebView? No quiero deshabilitar la interacción del usuario, pero no quiero que la vista web muestre ese zoom. ¿Algunas ideas?Cómo deshabilitar la lupa en UIWebview?

+0

¿Aún desea toques en la vista web? – Satyam

Respuesta

8

No, la lupa está inextricablemente vinculada a la selección. Para deshabilitarlo, deberá deshabilitar la selección por completo (puede usar -webkit-user-select: none para hacer eso).

+4

Desafortunadamente, esto no funciona para mí. –

+1

si una entrada/área de texto se enfoca y se desenfoca sin que el usuario toque "Listo" en el teclado, este truco ya no funcionará. (iOS 7) – vilicvane

3

Porque no sé cómo usar -webkit-user-select: none busqué otras maneras. Y tropiezo en esto Customize the contextual menu of UIWebView luego lo combiné con -webkit-user-select: none.

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"]; 
} 
+1

'-webkit-user-select: none' es un atributo CSS. Entonces, necesitas usar el código que publicaste, o si tienes acceso al contenido web que se muestra en tu vista web, lo incluirías con tu CSS. – Ben

7

Como la solución aceptada no funcionó para mí, tuve que buscar otras opciones y encontré una.
Tenga en cuenta que no sé si Apple aprueba esta técnica. Úselo bajo su propio miedo y riesgo.

(La nuestra no fue rechazado; no creo de Apple se preocupa mucho acerca de que jugar con UIWebView internos, pero se advirtió.)

lo que hice fue recurrentemente camino por UIWebView subvistas y enumerar su gestureRecognizers. Cada vez que encuentro un UILongPressGestureRecognizer, configuro su enabled en NO.

Esto elimina por completo la lupa y, obviamente, desactiva cualquier funcionalidad predeterminada de pulsación larga.

Parece que iOS vuelve a habilitar (o vuelve a crear) estos reconocedores de gestos cada vez que el usuario comienza a editar texto.
Bueno, no me importa usar lupa en los campos de texto, así que no los desactivo inmediatamente.

En su lugar, espero el evento blur en mis elementos de texto, y cuando ocurre, recorro nuevamente el árbol de la subvista.
Tan simple como eso, y funciona.

+0

¿Qué diablos pasa con el voto abajo? ¿Hay algo de malo en documentar soluciones que funcionó con éxito para nosotros? –

+0

Esto me parece legítimo. – mark

+0

Cualquier código en swz plz? –

2

He encontrado que -webkit-user-select: none; solo no hace el truco. En su lugar he encontrado una propiedad bastante indocumentado -webkit-touch-callout

Lo que suele hacer con las aplicaciones PhoneGap es la siguiente:

body, body * { 
    -webkit-user-select: none !important; 
    user-select: none !important; 
    -webkit-user-callout: none !important; 
    -webkit-touch-callout: none !important; 
} 
input, textarea { 
    -webkit-user-select: text !important; 
    user-select: text !important; 
    -webkit-user-callout: default !important; 
    -webkit-touch-callout: default !important; 
} 

En algún lugar se mencionó que -webkit-user-callout es una versión legado de -webkit-touch-callback, he puesto esto en tan sólo en caso.

+0

No funciona en la aplicación phonegap. Lo he intentado con todos y cada uno de los div –

+0

@ Mo.Ashfaq ¿con qué versión de iOS prueba? –

+0

ios8, en iphone 5s. La información adicional es que tengo algunos elementos como h2, img dentro de mi div y apliqué esta solución a todos y cada uno de los elementos. –

0

Para nuestro proyecto Swift Cordova & que hice:

override init!(webView theWebView: UIWebView!) 
    {    
     super.init(webView: theWebView) 

     removeLoupe() 
    } 

    /** 
     Removes the magnifying glass by adding a long press gesture that overrides the inherent one that spawns 
     a the loupe by default. 
    */ 
    private func removeLoupe() 
    { 
     let views = webView?.subviews 
     if (views == nil || views?.count == 0) 
     { 
      return 
     } 

     let longPress = UILongPressGestureRecognizer(target: self, action: "handleLongPress:") 
     longPress.minimumPressDuration = 0.045 
     longPress.allowableMovement = 100.0 

     for view in views! 
     { 
      if (view.isKindOfClass(UIScrollView)) 
      { 
       let subViews = view.subviews 
       let browser = subViews[0] 
       browser.addGestureRecognizer(longPress) 
       break; 
      } 
     } 
    } 

    /** 
     Hack to override loupe appearence in webviews. 
    */ 
    func handleLongPress(sender:UILongPressGestureRecognizer) 
    { 

    } 

Tenga en cuenta que esta es mi clase CDVPlugin (o más bien mi versión personalizada de la misma).

Asegúrese de que el archivo config.xml tiene:

<feature name="CustomCDVPlugin"> 
    <param name="ios-package" value="CustomCDVPlugin" /> 
    <param name="onload" value="true" /> 
</feature> 

Esto asegurará que el método se llama init().

Cuestiones relacionadas