web-dev-qa-db-ja.com

セグエを使用してNavigationControllerにUIViewControllerを埋め込む

私は通常(ほとんどの場合)プッシュセグエを使用してアクセスされるviewControllerを持っています。このviewControllerはUINavigationControllerに埋め込まれている必要があります。したがって、通常、これは問題ありません。プッシュセグエはviewControllerのプッシュを管理するため、viewControllerにはUINavigationControllerがあります。

私の問題は、いくつかのケースでは、モーダルセグエを使用してこれとまったく同じviewControllerを提示したいということです。これを行うと、viewControllerはnavigationControllerに埋め込まれません。セグエを使用してこれを行う方法はありますか?

これは、UINavigationControllerを作成し、rootViewをviewControllerとして設定し、それをモーダルに提示することで、セグエなしで純粋にコードで実行できることを知っています。これは、次のようなコードを使用して実行できます。

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

しかし、これと同じことをセグエを使用して行うにはどうすればよいですか?

更新


さらに明確にするために、prepareForSegueメソッドで受け入れられた回答をどのように使用したかを補足するコードを次に示します。

モーダルセグエ使用時

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

プッシュセグエ使用時

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

ストーリーボードでは、View Controllerを選択し、上部のメニューから選択することで、ViewControllerをNavigationControllerに埋め込むことができますEditor->Embed In->Navigation Controller。別のViewControllerから、このNavigation Controllerへのドラッグを制御して、modalセグエを設定します。元のViewControllerへのドラッグを制御して、NavigationControllerなしでセグエを設定することもできます。

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

30
vacawama

簡単にするためにXcodeのより詳細なビューを提供するだけです。

enter image description here

0
Harjot Singh