2012-10-11 18 views
5

Sto cercando di ottenere un funzionamento semplice. Almeno sembra semplice. Ok, quello che mi piacerebbe fare è spingere una vista (con il controller di visualizzazione push) da una vista che è stata spinta con il controller di visualizzazione modale.Visualizzazione vista controller in modalità modale vista controller

View1 - (spingere utilizzando il controller vista modale) -> Visualizza2 - (premere utilizzando il controller di visualizzazione push) - View3.

Al momento, sto eseguendo dei test, quindi sto utilizzando un pulsante per avviare l'azione. Ecco il codice che uso per spingere da View2 per visualizzare 3:

//view2.h 
UIToolbar *bar; 
UIBarButtonItem *button; 
UIToolbar *toolbar; 

} 

- (IBAction)demissModal:(id)sender; 
- (IBAction)goView3:(id)sender; 

@end 

//view2.m 
- (IBAction)goView3:(id)sender{ 

View3 *view_3 = [[View3 alloc] initWithNibName:@"View3" bundle:nil]; 
[self.navigationController pushViewController:view_3 animated:YES]; 

} 

Questo è lo stesso codice che uso per spingere Visualizzazione1 a View2, e funziona. Ma quando si spinge View2 a View3, non funziona. Qualche idea del perché succede? Grazie!

+0

è necessario premere il controller di visualizzazione sul controller attivo. Verifica se funziona [self pushViewController: view_3 animated: YES]; –

risposta

11

View I controller non sono controller di visualizzazione "modali" o "push". Modale o Push descrivono una transizione tra i controller della vista (chiamati segues se stai usando gli storyboard).

Quello che penso tu stia chiedendo è come presentare in modo modale un controller di visualizzazione e quindi premere un altro controller. Il trucco è quando presentate modalmente il controller di visualizzazione n. 1, per presentare effettivamente un controller di navigazione con il suo controller di visualizzazione radice impostato come controller di visualizzazione n. 1.

MyViewController *myViewController = [MyViewController alloc] init]; 
UINavigationController *navController = [UINavigationController alloc] initWithRootViewController:myViewController]; 

// Presuming a view controller is asking for the modal transition in the first place. 
[self presentViewController:navController animated:YES completion:nil]; 
// Now in myViewController, call [self.navigationController pushViewController:secondViewController animated:YES]; 

Questo è ciò che sembra che utilizzano storyboard: enter image description here

+0

Ok, funziona ma non molto bene. Quando la seconda vista viene visualizzata con la transizione modale, ho visto il pulsante che deve essere premuto per passare a View3. Se premo il pulsante una volta, visualizza la stessa vista con la transizione modale, e se premo un'altra vista, mostra lo stesso con una transizione strana. Non so perché succede. – joan2404

+0

Quale codice viene eseguito quando si preme il pulsante che dovrebbe causare la spinta? Dovrebbe essere qualcosa come '[auto.navigationController pushViewController: <# UIViewController #> animato: YES]; ' – MaxGabriel

+0

Ecco il codice che sto utilizzando: View * myViewController = [[View2 alloc] init]; View3 * descripcio = [[View3 alloc] init]; UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: View2]; [autopresenteViewController: navController animato: SÌ completamento: nil]; [self.navigationController pushViewController: View3 animato: YES]; – joan2404

0

Prova questo:

[self.navigationController pushViewController:view_3 animated:YES]; 
0

Prima di tutto, io non so dove che gegant_se proviene.

In secondo luogo, se si spinge view2 dalla view1 nello stesso modo in cui si preme view3 da view2, non si utilizza una modal.

Ogni volta che si utilizza un controller di navigazione per premere un controller di visualizzazione, il controller di visualizzazione appena inserito ha un riferimento al controller di navigazione, tramite la proprietà navigationController. Prova questo:

[self.navigationController pushViewController:view_3 animated:YES]; 
+0

Mi dispiace per questo gegant_se. Era solo un test e ho dimenticato di cambiarlo. – joan2404

0

provare questo codice AlarmList è nome della vista.

AlarmListScreen * loscr = [[Alloggiamento AlarmListScreen] initWithNibName: nil bundle: nil];

[self.navigationController pushViewController: loscr animato: YES];

[loscr release]; 
Problemi correlati