2012-10-24 21 views
14

enter image description hereSegue tra due controllori vista

Sul mio storyboard (mostrato sopra), ho un ViewController che detiene un MKMapView con annotazioni. Queste annotazioni contengono un'icona di divulgazione che, quando viene toccata, deve passare all'utente a un altro ViewController. Per fare ciò ho creato un passaggio di spinta tra i controller della vista. Ho quindi fornito un identificatore di "showDetail" e implementato il seguente codice.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [self performSegueWithIdentifier:@"showDetail" sender:self]; 
} 

Tuttavia, ho ricevuto il seguente errore.

Could not find a navigation controller for segue 'showDetail'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 

Dove sto andando male? Ho provato a cambiare il mio UIViewController di origine in un UINavigationController, ma la visualizzazione viene semplicemente visualizzata come una schermata nera.

+0

Puoi pubblicare uno screenshot dello storyboard con entrambi i ViewControllers? – Mariusz

+0

@Mariusz domanda aggiornata! Grazie. – Jonathan

+0

Cerca di incorporare il tuo ViewController di destinazione in un NavigationController e trascina i tuoi passi da MapViewController a NavigationController. – Mariusz

risposta

38

In realtà è necessario impostare UIViewController come controller di root di un UINavigationController (o spostato da un controller di visualizzazione w/a navcontroller). Per fare questo

  • Trascinare un nuovo controller di navigazione nel vostro storyboard - sarà per impostazione predefinita essere collegato a un controller Tableview
  • Elimina il controller Tableview Fare clic destro sul controller navgiation , e collegare la "Root View controller" proprietà alla controller della vista esistente
  • spostare il punto di freccia voce dalla controller della vista alla radice vista del regolatore
+0

Funziona! Grazie. Per verificare se ho capito bene, ora ho un TabBarController e un UINavigationController. Non c'è un controller in grado di gestire entrambi? – Jonathan

+0

Controlla questa documentazione: http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html#//apple_ref/doc/uid/TP40011313-CH6-SW1 I passaggi sono sotto il titolo "Creare gli oggetti usando uno storyboard". –

+0

È molto utile! – Pierry

41

più semplice modo per farlo è quello di selezionare il controller della vista che si desidera essere la radice della gerarchia di navigazione e scegliere

Editor > Embed In > Navigation Controller 

Questo crea il nuovo controller di navigazione e si aggancia tutto per voi.

0

selezionare questa procedura: 1. per fare clic sulla connessione tra due controller di visualizzazione. 2. click attribute inspector 3. imposta identificatore su "showDetail". 4. salvare ed eseguire.

Problemi correlati