使用segues在NavController中嵌入UIViewController

时间:2013-04-27 15:06:21

标签: ios uinavigationcontroller uistoryboard uistoryboardsegue

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

我的问题是,在少数情况下,我想使用模态segue呈现同样精确的viewController。当我这样做时,viewController没有嵌入到navigationController中。有没有办法用segues做到这一点?

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

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
    }
}

使用推送搜索时

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

2 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:0)

为了方便,只需提供更详细的Xcode视图。

enter image description here