19

我有一个通常(最经常)使用推送 segue 访问的 viewController。这个 viewController 需要嵌入到 UINavigationController 中。所以通常,这没有问题。push segue 管理推送 viewController,因此 viewController 有它的 UINavigationController。

我的问题是,在某些情况下,我想使用模态 segue 呈现相同的视图控制器。当我这样做时,viewController 没有嵌入到导航控制器中。有没有办法使用 segues 做到这一点?

我知道这可以通过创建 UINavigationController,将 rootView 设置为 viewController,然后以模态方式呈现,从而完全在没有 segues 的代码中完成。这可以使用这样的代码来完成:

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

但是除了使用 Segues 之外,我该如何做同样的事情呢?

更新


为了更清楚起见,这里有一些代码来补充我如何在 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
    }
}

使用 Push Segue 时

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

1 回答 1

32

在您的 Storyboard 中,您可以通过选择 View Controller 然后从顶部的菜单中选择来将 ViewController 嵌入到 Navigation Controller 中Editor->Embed In->Navigation Controller。从另一个视图控制器,您可以控制拖动到此导航控制器以设置modalsegue。您还可以控制拖动到原始视图控制器,以在没有导航控制器的情况下对其进行设置。

显示视图控制器的情节提要既嵌入在导航控制器中,也未嵌入

于 2013-04-27T16:12:20.257 回答