11

我有这个问题。在我的根视图控制器中,我有一个文本字段和一个按钮。我给出的条件是,如果我在文本字段中输入 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];

}  
}
4

7 回答 7

12

去:

编辑器--> 嵌入--> 导航控制器,添加Navigation Controller到您的初始视图

于 2013-10-07T11:35:43.487 回答
5

查看屏幕截图后,您需要

  1. 将您推SecondViewController送到现有导航控制器的堆栈上,而不是模态显示它或
  2. 您需要将您的导航控制器嵌入SecondViewController另一个导航控制器,然后从您的 SamplesViewController 模态创建并呈现该导航控制器

无论哪种方式,SecondViewController都需要嵌入到导航控制器中,然后才能从中使用 Push Segues

于 2013-10-07T13:42:44.320 回答
1

将您的视图控制器嵌入到导航控制器中,或者如果故事板中有导航控制器,请将其设置为初始视图控制器

于 2014-08-14T09:44:40.967 回答
0

我也面临同样的问题。我的问题是我在当前控制器之前使用modelsegue 样式(而不是那个push),因为我认为它之前已经破坏了导航链。

于 2013-12-09T14:30:39.450 回答
0

如果情节提要UINavigationController中没有,将视图控制器嵌入 a是一个不错的选择。UINavigationController否则,您可以UINavigationController在检查器窗格中选择并选择根视图控制器,然后将其拖动到UIViewController您要用作根的视图控制器。截图如下: 在此处输入图像描述

于 2014-11-11T06:11:22.867 回答
0

我通过在 UINavigationController 和目标视图控制器之间创建自定义 UIStoryboardSegue 解决了这个问题:

-(void) perform
{
    assert([self.sourceViewController isKindOfClass:[MyNavigationController class]]);
    MyNavigationController *launchController = (MyNavigationController *) self.sourceViewController;
    [launchController setViewControllers:@[self.destinationViewController] animated:YES];
}
于 2015-03-18T17:31:18.133 回答
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];
于 2015-09-12T06:54:30.020 回答