9

¿Cómo descarto el teclado sin presionar el botón Enviar o Cancelar en MFMailComposeViewController ?!MFMailComposeViewController Keyboard Issue

Gracias por cualquier ayuda.

+3

Por curiosidad, ¿por qué querrías? – PengOne

+0

Mi aplicación fue rechazada hoy debido al uso del código sugerido por 7KV7. Solo para que sepa que no debe usar esto en las aplicaciones de la tienda de aplicaciones. –

Respuesta

6

Puede intentar esto.

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 
[firstResponder resignFirstResponder]; 

esperanza esto ayuda ....

+4

Tenga en cuenta que el método 'firstResponder' de UIWindow es una API privada, por lo que su uso puede hacer que Apple rechace su aplicación si la envía a App Store y es probable que deje de funcionar sin previo aviso en versiones futuras si iOS. – Anomie

2

Si bien es probable que pueda hacerlo mediante la búsqueda de lo que es el punto de vista de primera respuesta y llamando resignFirstResponder en él (a menos que esté en el iPad y MFMailComposeViewController utiliza UIModalPresentationFormSheet), Apple podría rechazar tu aplicación por eso. Quoth the documentation:

Importante: El correo composición misma interfaz no es personalizable, y no debe ser modificado por la aplicación.

Esto podría interpretarse fácilmente para incluir el comportamiento del teclado.

3

Tuve un problema similar: por alguna razón iOS no descarta el teclado de un MFMailComposeViewController cuando la aplicación entra en segundo plano (el descarte ocurre cuando la aplicación se vuelve a activar). Sin embargo, iOS descarta el teclado si el primer respondedor es un elemento simple (por ejemplo, vista de texto). Llamar a resignFirstResponder no funcionó para mí en este caso particular. Como cambio de ventana en applicationBecomeActive (para mostrar una pantalla de inicio de sesión) terminé teniendo múltiples teclados uno encima del otro (el que está en la parte superior no funciona). encontré una solución simple para descartar el teclado de un MFMailComposeViewController cuando la aplicación activa renuncia:

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    // Workaround: MFMailComposeViewController does not dismiss keyboard when application enters background 
    UITextView *dummyTextView = [[UITextView alloc] init]; 
    [self.window.rootViewController.presentedViewController.view addSubview:dummyTextView]; 
    [dummyTextView becomeFirstResponder]; 
    [dummyTextView resignFirstResponder]; 
    [dummyTextView removeFromSuperview]; 
    // End of workaround 
} 

Esto renunciar implícitamente la primera respuesta si tenemos alguna viewController que esta en buen estado presenta actualmente.

+0

¡Thx! Parece que es la única forma válida de cerrar el teclado para MFMailComposeViewController (o SLComposeViewController) debido a la introducción de vistas remotas en iOS> = 6 (_UIRemoteView) –

+0

Tiene toda la razón, gracias por señalarlo. Para aclarar esto: mi suposición es que como las vistas remotas se ejecutan en un proceso separado, no se puede quitar el teclado, sin embargo, al solicitar el primer respondedor para una vista controlada por la aplicación, retoma implícitamente el control del teclado. –