web-dev-qa-db-fra.com

Incorporer un UIViewController dans un NavigationController à l'aide de segues

J'ai un viewController qui est généralement (le plus souvent) accessible en utilisant une séquence Push. Ce viewController doit être intégré à un UINavigationController. Donc, généralement, ce n'est pas un problème. La division Push gère la transmission du viewController, et donc le viewController a son UINavigationController.

Mon problème est que dans quelques cas, j'aimerais présenter ce même contrôleur de vue exact en utilisant une séquence modale. Lorsque je fais cela, le viewController n'est pas incorporé dans un navigationController. Y a-t-il un moyen de faire cela en utilisant des ligues?

Je sais que cela peut être fait purement dans le code sans étapes en créant un UINavigationController, en définissant le rootView comme viewController, puis en le présentant de manière modale. Cela peut être fait en utilisant un code comme celui-ci:

MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentModalViewController:navController animated:YES];

Mais comment puis-je faire la même chose en utilisant Segues?

Mettre à jour


Pour plus de clarté, voici un code qui complète la façon dont j'ai utilisé la réponse acceptée dans la méthode prepareForSegue.

Lors de l'utilisation de Modal Segue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue destinationViewController] isEqualToString:@"Modal to MyVC"])
    {
        UINavigationController *nav = [segue destinationViewController];
        MyViewController *vc = [nav topViewController];
        //setup vc
    }
}

Lors de l'utilisation de Push Segue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue destinationViewController] isEqualToString:@"Push to MyVC"])
    {
        MyViewController *vc = [segue destinationViewController];
        //setup vc
    }
}
17
hatunike

Dans votre Storyboard, vous pouvez incorporer un ViewController dans un contrôleur de navigation en sélectionnant le contrôleur de vue, puis en le sélectionnant dans le menu situé en haut de la page Editor->Embed In->Navigation Controller. Depuis un autre contrôleur de vue, vous contrôlez le glisser vers ce contrôleur de navigation pour configurer la séquence modal. Vous pouvez également contrôler le glisser vers le contrôleur de vue d'origine afin de définir des séparations sans contrôleur de navigation.

Storyboard showing a view controller both embedded in a navigation controller and not

26
vacawama

Simplement en donnant une vue plus détaillée de Xcode.

 enter image description here

0
Harjot Singh