2010-05-20 17 views
17

El IPAD teclado virtual desaparecerá en uno de (al menos) estas 3 circunstancias:¿Detecta la ocultación del teclado del iPad frente a la conexión del teclado externo?

  1. Si el control (por ejemplo, un UITextField) renuncia programación de primera respuesta.
  2. Si el usuario toca el botón "descartar el teclado" en la esquina inferior derecha.
  3. Si el usuario se conecta al puerto USB/teclado dock.

En todos los casos, obtengo el UIKeyboardWillHideNotification.

El problema es que los dos primeros casos son generalmente equivalentes, en otras palabras, el usuario ha terminado de editar el campo de texto. Pero en el tercer caso, el campo de texto todavía se está editando, solo desde otra fuente de entrada.

El problema es detectar la diferencia entre los casos 2 y 3. Todo lo que obtengo en ambos casos es UIKeyboardWillHideNotification. En el caso 2, generalmente también quiero bloquear el control de edición y comprometer el valor. En el caso 3, generalmente no quiero hacer nada y permitir que la edición continúe.

Pero, ¿cómo noto la diferencia?

La aplicación de páginas de Apple parece ser capaz de distinguir esto en el cambio de nombre del título del documento.

Respuesta

2

Me gustaría ver el UIKeyboardBoundsUserInfoKey pasado con la notificación. El teclado físico probablemente tiene límites vacíos.

+0

Desafortunadamente no. El teclado físico no genera un UIKeyboardWillShowNotification cuando aparece. Adjuntarlo simplemente genera una notificación de WillHide que corresponde a la virtual. –

+0

En el caso 1, el control pierde el foco. ¿Es lo mismo en el caso 2? Supongo que en el caso 3, el control retiene el foco. – drawnonward

+0

En los casos 2 y 3, el control continúa siendo firstResponder. La renuncia del primer respondedor descartará el teclado, pero lo contrario no es aparentemente cierto. –

2

Parece que está tratando de averiguar cuándo termina la edición del usuario. Se podía escuchar la notificación UITextFieldTextDidEndEditingNotification para los casos 1 y 2.

Una solución mucho más simple sería no pudiste comprobar contra la propiedad editing de UITextField para determinar si todavía supone que debería estar editando o no? No tengo un teclado físico, así que no tengo forma de probar esto. Solo estoy adivinando.

Aquí hay un enlace a la documentación sobre este inmueble: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html#//apple_ref/occ/instp/UITextField/editing

Estoy muy curioso por saber si esto funciona o no ... :)

+0

Para el caso n. ° 2, el campo de texto todavía se está editando, y sigue siendo el primer respondedor. Simplemente no hay teclado. –

Cuestiones relacionadas