22

Sto cercando di nascondere la tastiera iPad da un controller di visualizzazione modale ma non funziona. Ho provato resignFirstResponder ma questo non ha alcun effetto se ci troviamo in un controller di visualizzazione modale. Ho provato resignFirstResponder in un UINavigationController non modale con lo stesso UIViewController e la tastiera nasconde correttamente.Come NASCONDERE la tastiera iPad da un controller di visualizzazione MODAL?

Qualcuno sa come risolvere questo problema?

Grazie.

[Aggiornamento] sembra che ci sia qualcosa di sbagliato nel mio codice perché resignFirstResponder funziona (ho fatto un semplice test case invece di usare il mio codice). Ma ancora non so quale sia il problema.

+1

bene ottengo lo stesso problema nel simulatore iPad in modo da non avete bisogno di uno :) – Cal

+0

uomo, stavo sprecando un paio d'ore con lo stesso problema – CVertex

+1

Sì, questo è sicuramente un bug con iOS 3.2. Ho riparato cambiando a loginForm.modalPresentationStyle = UIModalPresentationPageSheet invece di UIModalPresentationFormSheet –

risposta

14

Era perché stavo usando UIModalPresentationFormSheet. Tutti gli altri funzionano come previsto ... Ci sono volute diverse ore.

+0

Ho riscontrato lo stesso identico problema: si tratta di un bug con UIModalPresentationFormSheet? – davbryn

+0

Suppongo che assumano che se si sta facendo la voce di modulo non si vorrà mai nascondere la tastiera ... Ho finito per modificarlo in un controller di visualizzazione non modale nel mio caso. – Cal

+1

Vedere la risposta di 0xced insieme al commento di bracciatear. –

3

Ho appena confermato il problema è davvero UIModalPresentationFormSheet e ha presentato un bug report a rdar mela: // 8084017

+0

Succhia che dobbiamo aspettare per 4.0 per uscire per iPad in "the fall" (ogni volta che lo è) –

+0

Posso chiedere, hai ricevuto un feedback da Apple per quanto riguarda il bug che hai segnalato? – thatsdisgusting

3

Ho risolto questo ridimensionando un UIModalPresentationPageSheet. Vedi la mia risposta here.

34

Apparentemente, esiste un nuovo metodo -[UIViewController disablesAutomaticKeyboardDismissal] che è possibile ignorare per risolvere questo problema in iOS 4.3.

+1

Ho implementato questo metodo sul mio modale UIViewController ma mantiene comunque la tastiera aperta. Qualche idea? Grazie. – morais

+23

@morais Se stai presentando il tuo controller di visualizzazione all'interno di navigationController devi sottoclasse UINavigationController e implementare il metodo lì. – manicaesar

+0

Wow ... dov'è CHE nella documentazione. Mi hai appena salvato una tonnellata di lavoro manicheo. Grazie! –

5

Questo è stato un dolore totale da trovare. Sembra uno dei progetti API più poveri in iOS. Molto apprezzamento per @ 0xced e @manicaesar per le risposte.

Ecco la mia risposta consolidata per i futuri sviluppatori che sono bloccati a battere la testa contro il muro.

Se si tratta di un controller a vista singola, eseguire l'override di disablesAutomaticKeyboardDismissal e restituire NO.

Se si tratta di un controller di navigazione in un modal, creare il proprio sottoclasse UINavigationController in questo modo:

In .h ...

 

@interface MyNavigationController : UINavigationController 

@end 

In .m ....

 
@implementation MyNavigationController 


#pragma mark - 
#pragma mark UIViewController 
- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 

@end 

Nel codice che mostra un controller di visualizzazione modale.

 
UIViewController *someViewController = [[UIViewController alloc] init]; 

MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:someViewController]; 

navController.modalPresentationStyle = UIModalPresentationFormSheet; 
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:navController animated:YES]; 

+0

Grazie! Questa correzione mi ha aiutato. –

Problemi correlati