私は通常(ほとんどの場合)プッシュセグエを使用してアクセスされる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
}
}
ストーリーボードでは、View Controllerを選択し、上部のメニューから選択することで、ViewControllerをNavigationControllerに埋め込むことができますEditor->Embed In->Navigation Controller
。別のViewControllerから、このNavigation Controllerへのドラッグを制御して、modal
セグエを設定します。元のViewControllerへのドラッグを制御して、NavigationControllerなしでセグエを設定することもできます。