【问题标题】:presentViewController: 'Could not find a navigation controller for segue ' - how to handle 2 segues from the same ViewControllerpresentViewController: 'Could not find a navigation controller for segue' - 如何处理来自同一个 ViewController 的 2 个 segue
【发布时间】:2014-05-06 22:20:03
【问题描述】:

我第二次尝试展示我的视图控制器时遇到了一个异常,我希望这个列表中的人们能够阐明我做错了什么......

我的故事板有一个加载 CategoryViewController 的 navigationController。在 CategoryViewController UI(一个 UICollectionViewController)中,一个 segue 连接到单元格以加载另一个视图控制器。

当单元格上发生点击时,我的 CategoryViewController 中的 performSegue 被调用(到目前为止一切都很好),然后我重新加载相同的视图控制器,如下所示:

//check if item has a second category or not
if (/*need to reload same controller with different data*/) {
        //Load list of items for that category
        //CategoryViewController *v= [segue destinationViewController];

        UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"categoryViewID"];
        CategoryViewController *cvc = (CategoryViewController*)vc;
        // do some into on cvc here

        vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self.navigationController pushViewController:vc animated:YES];

    } 

这很好用。现在,一旦 CategoryViewController 的第二个实例被加载并显示并且我单击一个单元格,performSegue 再次被调用,并且 if 语句的第二部分被执行,我尝试加载另一个 viewController 执行以下行周围的东西:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
 UINavigationController *vc = [sb instantiateViewControllerWithIdentifier:@"categoryViewerID"];
 CategoryViewerController *cvc = (CategoryViewerController*)vc;
 vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
 [self.navigationController presentViewController:vc animated:YES completion:NULL];

我的新 viewController 被实例化,但之后出现以下运行时错误: 原因:'找不到用于 segue 'showCategoryList' 的导航控制器。只有当源控制器由 UINavigationController 的实例管理时,才能使用推送 segue。'

知道我可能做错了什么吗?

【问题讨论】:

  • 我能在两者之间做出的唯一区别是,在一个循环中,您正在推动视图控制器,而在另一个循环中,您正在呈现它..所以尝试推动后半部分查看控制器,您会收到异常!
  • 不抱歉 - 尝试过但遇到了同样的问题。不知何故,我第一次调用新视图控制器的调用必须弄乱层次结构 - 我试图添加一个新的 segue,在情节提要中加载一个新的控制器视图,但我遇到了同样的问题......

标签: ios7 uiviewcontroller uinavigationcontroller uistoryboard segue


【解决方案1】:

我终于找到了一种方法来完成这项工作。

DTS 提供了一个很棒的示例代码,展示了如何使用 segue 并展示了如何从 1 个视图控制器设置多个 segue: https://developer.apple.com/library/ios/samplecode/UnwindSegue/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013644

第一个 segue 从 cellID 连接到其自身(按住 ctrl 单击从 cell ID 拖动到场景底部的控制器) - 第二个 segue 从控制器连接到我故事板中的第二个场景。

在我实现 shouldPerformSegueWithIdentifier 的代码中,当我不想创建新的“相同控制器”时返回 false。

当在我的控制器中满足正确的条件时,我使用示例代码 didSelectItemAtIndexPath 通过调用 performSegueWithIdentifier 来触发第二个 segue。

还有一个谜团:导航控制器现在位于我的 rootViewController 和我的第二个 viewController 之间。我将不得不尝试将其移回原来的位置,看看这是否会改变应用程序的行为并再次生成运行时错误...

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多