我第二次尝试呈现我的视图控制器时遇到异常,我希望这个列表上的人可以了解我做错了什么......
我的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实例管理时使用。
知道我可能做错了什么吗?
答案 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之间。我将不得不尝试将其移回原来的位置,以查看是否会改变应用程序的行为并再次生成运行时错误...