使用 segues 在 NavigationController 中嵌入 UIViewController

Posted

技术标签:

【中文标题】使用 segues 在 NavigationController 中嵌入 UIViewController【英文标题】:Embed a UIViewController in a NavigationController using segues 【发布时间】:2013-04-21 15:25:26 【问题描述】:

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

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

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

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
    

【问题讨论】:

这很好用!使用模态segues卡住了,这帮助了我。 【参考方案1】:

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

【讨论】:

以上是关于使用 segues 在 NavigationController 中嵌入 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用警报视图解除 segue?

在 segue.destination 中使用 ViewController 变量

Segue 和使用 instantiateViewController 有啥区别?

IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?

使用 segue 在 View Controller 之间传递变量

if Condition 在执行 segue 之前为 True