我遇到了这个问题。 在我的根视图控制器中,我有一个textfield&一个按钮。我给出了一个条件,如果我在文本字段中输入0然后只有它应该移动到下一个视图。 到这里它正常工作。但现在这里有问题。在这里,我有一个按钮&给定导航到该按钮的第三个视图控制器。我在这里得到错误
Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'
图片参考:http://img12.imageshack.us/img12/8533/myp5.png
我正在第一个视图中按下按钮,如下所示
- (IBAction)Submit:(id)sender {
if([tf.text isEqual:@"0"])
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SecondViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewControllerID" ];
[self presentViewController:vc2 animated:YES completion:NULL];
}
}
答案 0 :(得分:12)
转到:
编辑器 - >嵌入 - >导航控制器,将Navigation Controller
添加到初始视图
答案 1 :(得分:5)
查看截图后,您需要
SecondViewController
推送到现有导航控制器的堆栈,而不是以模态方式呈现或SecondViewController
嵌入到另一个导航控制器中,然后从SamplesViewController以模态方式创建并显示 导航控制器无论哪种方式,SecondViewController
都需要嵌入导航控制器才能使用Push Segues
答案 2 :(得分:1)
将视图控制器嵌入导航控制器中,或者如果故事板中有导航控制器,则将其初始视图控制器
答案 3 :(得分:0)
我也面临同样的问题。我的问题是我在当前控制器之前使用了model
segue样式(而不是push
),因为我认为它已经破坏了导航链。
答案 4 :(得分:0)
如果故事板中没有UINavigationController
,则将视图控制器嵌入UINavigationController
是一个不错的选择。否则,您可以选择UINavigationController
并在检查器窗格中选择根视图控制器,然后将其拖到要作为root用户使用的UIViewController
。截图如下:
答案 5 :(得分:0)
我通过在UINavigationController和目标视图控制器之间创建自定义UIStoryboardSegue来解决这个问题:
-(void) perform
{
assert([self.sourceViewController isKindOfClass:[MyNavigationController class]]);
MyNavigationController *launchController = (MyNavigationController *) self.sourceViewController;
[launchController setViewControllers:@[self.destinationViewController] animated:YES];
}
答案 6 :(得分:0)
试试这个。它适用于我。当您将根视图控制器设置为第一个视图并使用 self.presentViewController 时,控制器移动到下一个视图但导航控制器的实例仅用于第一个视图,第三个视图需要导航实例所以使用 self.navigationController 而不是presentViewController。
NSString * storyboardName=@"Main";
UIStoryboard *storybord=[UIStoryboard storyboardWithName:storyboardName bundle:nil];
SecondViewController *vc=[storybord instantiateViewControllerWithIdentifier:@"SecondViewControllerID"];
[self.navigationController pushViewController:vc animated:YES];