2011-11-10 23 views
9

tengo una vista con las notificaciones de teclado como keyboardWillShow y keyboardWillHidekeyboardWillShow llamado dos veces

Todos los códigos maneja con la notificación que uso se ha tomado de código de ejemplo de Apple "KeyboardAccessory"

La primera vez que entro en este punto de vista, todo lo funciona bien.

Pero cuando regrese a este punto de vista de sus subvistas, cada vez que pulse un botón que dice:

[myTextField becomeFirstResponder]; 

los métodos keyboardWillShow y keyboardWillHide serán llamados dos veces cada vez.

Es muy confuso,

podría alguien me ayuda con esto?

¡Realmente aprecio!

Respuesta

11

Es posible que desee publicar su código.

Si sus métodos están siendo llamados dos veces, lo más probable es que se registre para las notificaciones de teclado varias veces y no elimine al observador cuando lo crea.

Agregue su observador en viewWillAppear: y quítelo en viewWillDisappear: y vea qué sucede.

+0

Gracias! ¡De repente me hacen saber dónde está el problema! –

+0

¿Pero qué hay de decirnos la solución a su problema? Parece que es algo más que eliminar al observador de su controlador de visualización –

+0

En mi caso, sí tuve el observador agregado dos veces. Gracias ~ – James

6

Se llama dos veces en iOS 8 cuando se muestra un teclado personalizado, como SwiftKey.

En la primera llamada, probablemente se prepara para mostrarse, por lo que CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; tendrá una altura de 0 keybaord de 0.

La segunda llamada tendrá la altura correcta del teclado, por lo que si necesita ajustar las inserciones de contenido, puede verificar que la altura del teclado devuelto sea> 0 antes de calcular sus inserciones.

Además, se invoca siempre que el usuario cambie de teclado.

+3

Estoy obteniendo esto exactamente con la misma notificación (la dirección del objeto es igual) y la altura es igual, también ... :-(Además, solo estoy agregando el observador una vez en viewDidLoad –

3

Para mí, cambiar inputAccessoryView dispararía otra llamada de keyboardWillShow porque la altura de una vista de accesorio de entrada afecta la altura total del teclado.

Cuestiones relacionadas