2010-04-16 11 views
15

Tengo dos campos de texto, correo electrónico y contraseña. El siguiente código funciona bien cuando los campos se presentan en una vista normal, pero cuando están en un popover, resignFirstResponder no funciona (becomeFirstResponder funciona). Se solicitó textFieldsShouldReturn para ambos campos. ¿Alguna idea si me falta algo? Gracias!iPad popover textfield - resignFirstResponder no descarta el teclado

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

    if (theTextField == email) { 
     [password becomeFirstResponder]; 
     return NO; 
    } 

    [theTextField resignFirstResponder]; 
    return NO; 
} 
+3

Suena como un error. Sugeriría que se presente un informe en bugreport.apple.com. –

+2

Tiene el mismo problema cuando textFields está en una vista modal con modalPresentationStyle = UIModalPresentationFormSheet –

+0

También estoy experimentando este error. –

Respuesta

1

No estoy muy seguro de esto, pero, como entiendo la jerarquía de respuesta, renunciar funcionaría sólo si tiene alguna otra respuesta para responder.

En una vista normal, la vista en sí misma está dispuesta. En una ventana emergente, tal vez necesite hacer algo en su clase emergente (como volver a implementar algunos métodos de Responder) para que esto funcione.

1

Yo también estaba teniendo este problema. Pero lo resolví haciendo otro control, que no está en el popover como firstResponder y luego lo renuncié desde allí. Pero no sé cuál es el problema con Popover.

2

Como se describe en this answer, el teclado algunas veces permanecerá en la pantalla cuando la vista se presente con el estilo UIModalPresentationFormSheet.

17

Comprobar this pregunta:

Anulación disablesAutomaticKeyboardDismissal para volver NO de la siguiente manera fija el mismo problema de las minas. Usted debe poner este código en el controlador de vista, desde el que se inicia el teclado:

- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 
+1

Hay un caso especial. Si su controlador de vista está dentro de un UINavigaitonController, debe subclase UINavigationController y anular el método allí. Consulte http://stackoverflow.com/questions/3316700/dismiss-keyboard-on-ipad/14879832#14879832 para obtener más información. – Quentamia

0

La respuesta se proporciona como una posible solución a los demás con un problema similar, pero donde los remedios convencionales no funcionan.

En resumen -

que tenía un problema similar (bajo una cierta condición) e intentaron todo - en vano - Incluido en mi lista de posibles soluciones era [resignFirstResponder de obj], la anulación de la 'disablesAutomaticKeyboardDismissal 'para mi controlador de vista, [self.view endEditing: YES]; y un montón de otras cosas.

Fuimos a determinar la [id] de la primera respuesta actual, solo para descubrir que era nula. Tocando 'Listo' en el teclado o usando cualquiera de los métodos anteriores no hizo nada - el teclado permaneció - incluso después de tocar en otro campo de entrada.

La pantalla era esencialmente un ViewController con una UITableView con un campo de entrada de texto en cada celda, 7 u 8 en total. Al tocar en cualquier celda, se mostraría el teclado como se esperaba y presionar un botón 'Siguiente' por separado (para ocultar el teclado y otros procesos) funcionó como se esperaba. Sin embargo, en modo horizontal, el último campo fue cubierto por el teclado que requiere que la tabla se desplace para mostrarlo.

Después de desplazarse y tocar el último campo de entrada, no se pudo descartar el teclado, pase lo que pase. El único trabajo fue desplazar la tabla hacia atrás debajo del teclado, luego tocar el botón 'siguiente'. No tiene sentido.

Casi a punto de darse por vencido (e implementar una solución), la solución que funcionó fue hacer que el último campo de entrada fuera el firstResponder (aunque ya tenía un cursor parpadeante) y luego resignar aFirstResponder después de eso.

So;

`- (void) {actionNext

[[m_arrInputFields objectAtIndex:7] becomeFirstResponder]; 
[[m_arrInputFields objectAtIndex:7] resignFirstResponder]; 

}`

solucionó el problema - mientras que [m_arrInputFields objectAtIndex: #cualquier otro índice #] no lo hizo!

Sería grandioso si alguien puede proporcionar claridad o una explicación para esto - más - ¡Espero que ahorre a alguien más unas pocas horas de trabajo!

Cuestiones relacionadas