9

Come chiudere la tastiera senza premere il pulsante Invia o Annulla in MFMailComposeViewController ?!MFMailComposeViewController Keyboard Issue

Grazie per qualsiasi aiuto.

+3

Per curiosità, perché vorresti? – PengOne

+0

La mia app è stata rifiutata oggi a causa dell'uso del codice suggerito da 7KV7. Solo così sai di non usarlo nelle app nell'app store. –

risposta

6

Potete provare questo.

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

speranza che questo aiuta ....

+4

Nota che il metodo 'firstResponder' di UIWindow è un'API privata, quindi utilizzarlo è tenuto a far sì che Apple rifiuti la tua app se la invii all'App Store e rischia di smettere di funzionare senza preavviso nelle versioni future se iOS. – Anomie

2

Anche se probabilmente possibile farlo trovando qualunque vista è il primo soccorritore e chiamando resignFirstResponder su di esso (a meno che non siete su iPad e MFMailComposeViewController utilizza UIModalPresentationFormSheet), Apple potrebbe rifiutare la tua app per questo. Disse the documentation:

Importante: La posta composizione interfaccia di per sé non è personalizzabile e non deve essere modificato dall'applicazione.

Questo potrebbe essere facilmente interpretato per includere il comportamento della tastiera.

3

Ho riscontrato un problema simile: per qualche motivo, iOS non chiude la tastiera di un MFMailComposeViewController quando l'applicazione passa in background (il respingimento avviene quando l'applicazione ritorna attiva). Tuttavia, iOS disattiva la tastiera se il primo risponditore è un elemento semplice (ad esempio textview). Chiamare resignFirstResponder non ha funzionato per me in questo caso particolare. Perché cambio finestre su applicationBecomeActive (per mostrare una schermata di login) ho finito per avere più tastiere una sopra l'altra (quella in alto non funzionava). Ho trovato una soluzione semplice per nascondere la tastiera di un MFMailComposeViewController quando l'applicazione si dimette attiva:

- (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 
} 

Ciò implicitamente dimissioni il primo risponditore se abbiamo viewController che attualmente è provvisto sia presentato.

+0

Thx! Sembra che sia l'unico modo valido per ignorare la tastiera per MFMailComposeViewController (o SLComposeViewController) a causa dell'introduzione di visualizzazioni remote in iOS> = 6 (_UIRemoteView) –

+0

Hai assolutamente ragione - grazie per averlo indicato. Per chiarire questo: il mio presupposto è che, poiché le viste remote vengono eseguite in un processo separato, non è possibile portarle via la tastiera, tuttavia richiedendo il primo risponditore per una vista controllata dall'app si assume implicitamente il controllo della tastiera. –

Problemi correlati