2012-05-25 13 views
12

Estamos utilizando Phonegap para desarrollar nuestra aplicación móvil, y prestado código de aquí para eliminar el siguiente/ant/barra de negro hecho desde el teclado:Phonegap: eliminar por completo la barra de negro desde el teclado del iPhone

https://stackoverflow.com/a/9276023/35364

Lo que hace ese código es encontrar la barra negra, como un objeto UIView, y llama a 'removeFromSuperview' en él.

No estamos familiarizados con el iOS SDK/API. Entonces, si bien podemos ver el código y tener una idea de lo que está haciendo, no podemos decir si lo está haciendo correctamente o cómo mejorarlo.

El problema específico que nos estamos quedando en:

Tenemos un campo de texto para escribir un mensaje, y nos está controlando manualmente la colocación de este campo para ser exactamente encima del teclado, similar a la nativa de SMS aplicación En otras palabras, lo colocamos donde se suponía que debía estar la barra negra.

Cuando enfocamos/escribimos el campo del mensaje, el sistema empuja la vista hacia arriba. Parece que este es un mecanismo para asegurarse de que el campo de texto no sea invisible cuando el usuario lo ingrese.

Esto está sucediendo aunque el campo de texto es visible.

Me di cuenta de que colocando el campo de entrada justo encima de donde estaría normalmente la barra negra (en oposición a detrás), la vista no se desplaza.

¡Parece que el sistema de alguna manera piensa que la barra negra todavía está allí!

(Para verificarlo dos veces: cuando la barra negra no se elimina, y colocamos el campo de texto justo encima de ella, podemos enfocarla y escribirla, y la vista no se desplazará).

Así que la pregunta es:

¿Por qué el "sistema" push el contenido hasta la hora de editar un campo de texto que es lugar correcto "detrás" de donde se supone que la barra de negro a ser? ¿Es porque la barra negra aún no se ha eliminado por completo? ¿Necesitamos hacer algo para eliminar "completamente" la barra negra? ¿Necesitamos obligar a iOS a volver a calcular el tamaño del teclado? o que exactamente?

¿Este mecanismo (que hace subir la vista) está implementado por UIWebView de iOS o por Phonegap?

¿Hay alguna aplicación de teléfono que haya resuelto este problema?

Respuesta

9

reemplazar

[subviewWhichIsPossibleFormView removeFromSuperview]; 

con

UIScrollView *webScroll = [webView.subviews lastObject]; 
CGRect newFrame = webScroll.frame; 

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height; 
newFrame.size.height += accesssoryHeight; 

[subviewWhichIsPossibleFormView removeFromSuperview]; 
[webScroll setFrame:newFrame]; 

que cambiar el tamaño de la vista de contenido de desplazamiento para la cantidad de espacio de accesorios que falta. Hasta ahora está usando "API privada" como el otro código. En detalle, no está utilizando API privada directamente, pero si Apple decide cambiar la forma en que aparece una vista (en este caso, Teclado y WebView), se bloqueará.
Por ejemplo, si cambian el nombre a UIWebFormAccessory, su código ya no funcionará.

EDITAR:
en iOS 5.0+ puede llamar directamente al webView.scrollView. Así que se puede dividir el código para tener una pre IOS 5 de reserva:

UIScrollView *webScroll; 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) { 
    webScroll = webView.scrollView; 
} else { 
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x 
    // make sure this code runs appropriate on older SDKs 
} 
+0

Gracias, esto suena como que podría funcionar. Sin embargo, una cosa es que no estoy seguro de qué se supone que es 'webb'. Intenté 'UIScrollView * webScroll = [self.webView.subviews lastObject];' pero eso no pareció funcionar. – hasen

+0

ups, sí, fue mi webView temporal, un 'IBOutlet'. Pero debería funcionar como lo intentaste. Por favor, 'NSLog (% @, self.webView.subviews)'. Tal vez tenga más subvistas, solo tuve una (scrollView) –

+0

Creo que 'self.webView.scrollView' también debería funcionar. – hasen

0

Esto funcionó para mí: https://github.com/don/KeyboardToolbarRemover

Tendrá que saber, sin embargo, no hay ningún archivo de Cordova.plist como Phonegap 2.3. 0 - lugar editar el archivo XML de configuración con el siguiente:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" /> 

en la rama

Cuestiones relacionadas