2012-01-24 18 views
43

Ho problemi con il metodo dismissViewControllerAnimated che non chiude la visualizzazione.dismissViewControllerAnimated viene chiamato ma ViewController non è stato rimosso

Quello che sta accadendo in app è: si seleziona

  • cellulare in ItemViewController.
  • View è spinta ed al ItemDetailViewController e dettagli sono inviati tramite un delegato
  • utente seleziona 'fatto' e l'evento viene inviato tramite un delegato per essere chiuso in ItemViewController

Tutto questo funziona, tranne per la vista non è respinto, non ci sono errori. Qualcuno può vedere cosa c'è che non va?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller 
{ 
    NSLog(@"Controller: %@", controller); 
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60> 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Cosa succede se si invia 'dismissModalViewControllerAnimated:' invece? –

+0

Come viene premuto 'self' nello schermo? – Nekto

+0

@Vince: Ho provato ma non sembra funzionare se il seguito è un 'push'. –

risposta

65

Cosa succede se si chiama [controller.navigationController popViewControllerAnimated:YES] invece?

Se è per questo, se si chiama [controller dismissViewControllerAnimated:YES completion:nil] invece di chiamarlo autonomamente?

+4

+1 - 'push', quindi' pop' –

+1

Grazie, questo ha funzionato a meraviglia! Molto apprezzato. –

+8

La sintassi esatta che ha funzionato per me: [self.navigationController popViewControllerAnimated: YES]; – Dan

10

La risposta è in questa pagina: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController viene utilizzata quando non si dispone di un navigationController. Molto probabilmente si utilizza un controller di navigazione, quindi utilizzare il controllo popViewController self.navigationController.

Anche prendere nota del lemax sua osservazione: l'uso NULL, non nill per il completionhandler

+0

grazie, sembra che il nil è dove il mio problema era – John

+2

Usa NULL per puntatori non oggetto. Quindi non dovresti usare NULL qui. –

+2

MacTypes.h ha #define nil NULL ... –

4

Ho avuto un problema in iOS5 dove il callback di completamento norma non permetteva la vista a respingere completamente (solo la corrente spinto vista che modali)

[controller dismissViewControllerAnimated:YES completion:^ { 
    // 
}]; 

Soluzione per iOS5 è di non avere una richiamata:

[controller dismissViewControllerAnimated:YES completion:nil]; 
3

Si è verificato un problema durante il quale la chiamata a dismissViewControllerAnimated ha ignorato la tastiera in un UIViewController, ma non la vista stessa.

risolto utilizzando due chiamate:

[self dismissViewControllerAnimated:NO completion:nil]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

un solo istante per la tastiera, poi un uno animato per il controller

+0

incredibile, provato tutto prima di questo! –

0

la vostra situazione è - ItemViewController -> ItemDetailViewController (spinto navigationController) Self.dismissViewController (..) ignorare un controller di visualizzazione presentato su self (nel caso in cui sia ItemViewController). Qui, non hai presentato alcun VC su se stessi, invece hai spinto un nuovo VC sullo stack di navigazione. Quindi, il modo corretto per eliminare ItemDetailViewController sarebbe

self.navigationController.popViewController (true). si prega di leggere la descrizione di dismissViewController (....) per ottenere maggiore chiarezza.

Problemi correlati