2014-11-20 16 views
7

mi sembra di essere in esecuzione in un problema simile a quello in una questione irrisolta scritto: UIAlertController dismissing his presentingViewControllerrespingere UIAlertController presentata da un controller di vista modale

che vi presento un controller di vista modale in cima ad un'UIViewController normale. Quindi sto facendo spuntare un avviso su quel controller di visualizzazione modale. Quando spingo "ok" per chiudere l'avviso (generato con il codice sottostante), anche il controller della vista modale viene eliminato.

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" 
              style:UIAlertActionStyleDefault 
              handler:^(UIAlertAction *action{ 
                [self dismissViewControllerAnimated: YES completion: nil];}]; 

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign up problem." 
                   message:@"Some fields are empty. Please check your inputs and try again." 
                 preferredStyle:UIAlertControllerStyleAlert]; 
[alert addAction:ok]; 
[self presentViewController:alert animated:YES completion:nil]; 

Come posso ignorare solo l'avviso?

Mi rendo conto che è possibile evitare questo problema utilizzando una configurazione del tipo di controller di navigazione e nascondendo la barra di navigazione, in modo da ottenere la stessa sensazione del controller di visualizzazione modale, ma questo sembra sciocco. Grazie.

risposta

21

Non chiamare self dismissViewController nel gestore pulsanti. In particolare, si afferma che si desidera che il controller di visualizzazione venga chiuso.

Non è necessario chiudere l'avviso. Si chiuderà automaticamente da solo. L'unica cosa che dovresti fare nel gestore di pulsanti è eseguire qualsiasi azione tu abbia bisogno. Non fare niente se non hai bisogno di fare nulla.

Se il vostro avviso è semplicemente un messaggio e non è necessario eseguire alcuna azione, solo fare questo:

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
+0

Grazie. Molto apprezzato, e in realtà entrambi i comportamenti sono utili. –

0

Non è necessario chiudere o rimuovere manualmente lo UIAlertController in un gestore di pulsanti: lo fa da solo.

Basta rimuovere la chiamata a dismissViewControllerAnimated:completion:.

+0

Ma cosa succede se si vuole realmente per motivi specifici. Deve esserci un modo per chiuderlo a livello di programmazione. Ad esempio con il vecchio '' 'UIAlertView''' si può chiudere/nascondere quel programma in modo automatico. – Supertecnoboff

+0

@Supertechnoboff: Penso che puoi semplicemente '[auto dismissViewControllerAnimated: completion:]'. Non sono sicuro però. – Linuxios

Problemi correlati