presentViewController:'无法找到segue的导航控制器' - 如何处理来自同一ViewController的2个segue

时间:2014-03-27 18:26:57

标签: ios7 uiviewcontroller uinavigationcontroller uistoryboard segue

我第二次尝试呈现我的视图控制器时遇到异常,我希望这个列表上的人可以了解我做错了什么......

我的storyboard有一个可以加载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'的导航控制器。 Push segues只能在源控制器由UINavigationController实例管理时使用。

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

1 个答案:

答案 0 :(得分:0)

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

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

第一个segue从cellID连接到它自身(按住Ctrl键单击从单元格ID拖动到场景底部的控制器) - 第二个segue从控制器连接到我的故事板中的第二个场景。 / p>

在代码中我实现了shouldPerformSegueWithIdentifier,当我不想要一个新的"相同的控制器时,返回false。要被创造。

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

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