'推送segues只能在源控制器由UINavigationController实例管理时使用

时间:2013-10-07 11:31:45

标签: ios

我遇到了这个问题。 在我的根视图控制器中,我有一个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];

}  
}

7 个答案:

答案 0 :(得分:12)

转到:

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

答案 1 :(得分:5)

查看截图后,您需要

  1. 将您的SecondViewController推送到现有导航控制器的堆栈,而不是以模态方式呈现或
  2. 您需要将SecondViewController嵌入到另一个导航控制器中,然后从SamplesViewController以模态方式创建并显示 导航控制器
  3. 无论哪种方式,SecondViewController都需要嵌入导航控制器才能使用Push Segues

答案 2 :(得分:1)

将视图控制器嵌入导航控制器中,或者如果故事板中有导航控制器,则将其初始视图控制器

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果故事板中没有UINavigationController,则将视图控制器嵌入UINavigationController是一个不错的选择。否则,您可以选择UINavigationController并在检查器窗格中选择根视图控制器,然后将其拖到要作为root用户使用的UIViewController。截图如下: enter image description here

答案 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];