2010-10-04 8 views
6

Sono un'applicazione funzionante in cui ho chiamato presentModalViewController e una volta terminato (chiamando dismissModalViewControllerAnimated:YES) dovrebbe chiamare immediatamente popToRootViewControllerAnimated.Chiamata popToRootViewControllerAnimated after dismissModalViewControllerAnimated

Ma il problema è dismissModalViewControllerAnimated:YES funziona correttamente ma popToRootViewControllerAnimated non funziona dopo.

Il codice è stata di:

[self.navigationController dismissModalViewControllerAnimated:YES] ; 
[self.navigationController popToRootViewControllerAnimated:YES]; 

risposta

6

provare qualcosa di simile:

[self.navigationController dismissModalViewControllerAnimated:YES] ; 
[self performSelector:@selector(patchSelector) withObject:nil afterDelay:0.3]; 


-(void)patchSelector{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

Non è così pulito ma dovrebbe funzionare.

UPDATE: Si dovrebbe usare

[self dismissModalViewControllerAnimated:YES]; 

invece

[self.navigationController dismissModalViewControllerAnimated:YES] ; 

L'oggetto che presenta il modale è il controller della vista, non il controller di navigazione.

+0

Grazie Jorge. sta funzionando per me. –

0

immagino, che non sta chiamando il

[self.navigationController popToRootViewControllerAnimated:YES]; 

nel viewcontroller modal bersaglio. controllalo.

+0

grazie Krishnan per il tuo suggerimento –

2

Se si dispone di un controller di navigazione con una pila di UIViewControllers:

[self dismissModalViewControllerAnimated:YES]; 
[(UINavigationController*)self.parentViewController popToRootViewControllerAnimated:YES]; 
//UIViewController *vc = [[UIViewController new] autorelease]; 
//[(UINavigationController*)self.parentViewController pushViewController:vc animated:YES]; 

dal presupposto, che il regolatore di vista in cui chiama controller di vista modale ha navigationController.

0

Mi sono imbattuto in qualcosa di simile a questo. Devi prima fare una copia del tuo self.navigationcontroller e anche conservare te stesso, quindi quando chiami il secondo pop, c'è ancora un riferimento all'NC e tu esisti ancora.

// locally store the navigation controller since 
    // self.navigationController will be nil once we are popped 
UINavigationController *navController = self.navigationController; 

    // retain ourselves so that the controller will still exist once it's popped off 
[[self retain] autorelease]; 

    // Pop this controller and replace with another 
[navController popViewControllerAnimated:NO]; 
[navController pushViewController:someViewController animated:NO]; 

vedi: How can I pop a view from a UINavigationController and replace it with another in one operation?

Problemi correlati