segues 仅适用于导航控制器吗? [关闭]

Posted

技术标签:

【中文标题】segues 仅适用于导航控制器吗? [关闭]【英文标题】:Do segues work only with nav controllers? [closed] 【发布时间】:2013-10-11 15:20:26 【问题描述】:

我尝试使用情节提要从一个 ViewController 到另一个 ViewController 进行转场,但它引发了异常。

segues 是否仅适用于 NavigationControllers?当我尝试过这种方法时,它起作用了。

【问题讨论】:

什么异常??可能是你使用 seague 的方式是错误的。检查标识符是否与您在故事栏中指定的内容匹配。 【参考方案1】:

如果Segue 是从一个ViewController 创建到另一个ViewController,那么您需要以编程方式执行它,因为只有视图等视觉元素才能响应用户事件,因此如果没有用户交互,ViewController 就无法知道何时执行Segue

以下是您如何以编程方式进行操作。

    在 Interface Builder 中设置 Segue 标识符。

    调用[self performSegueWithIdentifier:@"MySegueIdentifier" sender:nil]; 响应事件,即按钮的TouchUpInside 来执行它。

这篇文章有更多信息: Segue implementation via code

注意:如果您没有使用NavigationController,则不能使用推送Segue 转换,因为这需要NavigationController。如果您想提出自己的转换,您仍然可以使用Modal 转换类型或Custom

【讨论】:

【参考方案2】:

如果您使用 Storyboard 从 ViewControllerAViewControllerB 将 ViewController 嵌入到 UINavigationController 中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"showDetail"]) 
    
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        ViewControllerB *viewControllerB = (ViewControllerB *)navController.topViewController;

        // Pass data (for example a NSString object)
        viewControllerB.aString = myString;
    

【讨论】:

以上是关于segues 仅适用于导航控制器吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

导航控制器调整大小仅适用于纵向?

我啥时候应该使用导航控制器?

在没有 UINavigationController 的情况下推送 Segue 动画

适用于 iPad 的 UINavigationController [关闭]

titleView 仅适用于一个视图控制器(self.navigationController 为 nil)

Swift 全屏导航推送 Segue