web-dev-qa-db-fra.com

Segue entre deux contrôleurs de vue

enter image description here

Sur mon storyboard (illustré ci-dessus), j'ai un ViewController qui contient un MKMapView avec des annotations. Ces annotations contiennent une icône de divulgation qui, lorsqu'elle est exploitée, doit permettre à l'utilisateur d'accéder à un autre ViewController. Pour ce faire, j'ai créé une transition Push entre les contrôleurs de vue. Je lui ai ensuite donné un identifiant de 'showDetail' et implémenté le code suivant.

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

Cependant, j'obtiens l'erreur suivante.

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.'

Où vais-je mal? J'ai essayé de changer mon source UIViewController en UINavigationController, mais la vue ne s'affiche alors que sur un écran noir.

14
Jonathan

Vous devez en fait définir votre UIViewController en tant que contrôleur racine d'un UINavigationController (ou forcé à partir d'un contrôleur de vue avec un contrôleur de navigation). Pour faire ça 

  • Faites glisser un nouveau contrôleur de navigation dans votre story-board. Par défaut, il sera attaché à un contrôleur tableview.
  • Supprimer le contrôleur de vue de table Cliquez avec le bouton droit de la souris sur le contrôleur de navigation Et connectez la propriété "Contrôleur de vue racine" à votre contrôleur de vue existant
  • Déplacez la flèche du point d'entrée de votre contrôleur de vue vers la racine Contrôleur de vue
38
Edwin Iskandar

La manière la plus simple de le faire est de sélectionner le contrôleur de vue que vous voulez être la racine de votre hiérarchie de navigation et de choisir

Editor > Embed In > Navigation Controller

Cela crée le nouveau contrôleur de navigation et raccorde tout pour vous.

41
Aran Mulholland

vérifiez ces étapes: 1. cliquer sur la connexion entre deux contrôleurs de vue . 2. Cliquez sur Inspecteur d'attributs 3. définissez l'identifiant sur "showDetail" . 4. sauvegarder et exécuter.

0
Raj Kumar