Ios '仅当源控制器由UINavigationController实例管理时,才能使用推送序列

Ios '仅当源控制器由UINavigationController实例管理时,才能使用推送序列,ios,Ios,我对此有点问题。 在我的根视图控制器中,我有一个文本字段和一个按钮。我给出了一个条件,比如如果我在textfield中输入了0,那么只有它才会移动到下一个视图。 到目前为止,它工作正常。但现在问题来了。这里我有一个按钮&为该按钮提供到第三视图控制器的导航。在这里,我得到了一个错误 Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when th

我对此有点问题。 在我的根视图控制器中,我有一个文本字段和一个按钮。我给出了一个条件,比如如果我在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.'
图像参考:

我在第一个视图中为按钮提供操作,如下所示

- (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];

}  
}
转到:


编辑器->嵌入->导航控制器,要在查看屏幕截图后将导航控制器添加到初始视图中,您需要

将SecondViewController推到现有导航控制器的堆栈上,而不是以模式或方式显示它 您需要将第二个ViewController嵌入到另一个导航控制器中,然后从SampleViewController以模式创建和呈现该导航控制器
无论哪种方式,SecondViewController都需要嵌入到导航控制器中,然后才能从中使用推送序列

我也面临同样的问题。我的问题是,我使用的是model segue样式,而不是在当前控制器之前推送一个,因为我认为这已经打破了导航链。

要么将视图控制器嵌入导航控制器,要么在故事板中有导航控制器,使其成为初始视图控制器

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

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

-(void) perform
{
    assert([self.sourceViewController isKindOfClass:[MyNavigationController class]]);
    MyNavigationController *launchController = (MyNavigationController *) self.sourceViewController;
    [launchController setViewControllers:@[self.destinationViewController] animated:YES];
}

试试这个。它适用于我。当您将根视图控制器设置为first view并使用self.presentViewController时,控制器将移动到下一个视图,但导航控制器的实例仅适用于first view,第三个视图需要导航实例,因此请使用self.navigationController而不是presentViewController

NSString * storyboardName=@"Main";
                UIStoryboard *storybord=[UIStoryboard storyboardWithName:storyboardName bundle:nil];
                 SecondViewController *vc=[storybord instantiateViewControllerWithIdentifier:@"SecondViewControllerID"];
                [self.navigationController pushViewController:vc animated:YES];

我已经补充了。检查第一个选项中的屏幕截图,如果textfield text仅等于0,我需要导航到第二个视图。所以,如果我用现有的导航控制器按下seconviewcontroller,它不会检查if条件并自动导航。在第二个选项中,同样的情况也会发生,它不检查条件是否正确,并且自动导航。您的解释有点不清楚,但我认为您想要的是在按下该按钮时有条件地转到特定视图。只需在XCode中将源视图控制器(而不是按钮)的推送序列连接到目标视图控制器。然后,在与按钮关联的操作中,您可以查询文本字段的内容,并使用要调用的序列调用-voidPerformsgueWithIdentifier:NSString*identifier sender:idsender。我需要类似的场景。如何实现这一点?@ BijythangaRJ考虑场景A> B> C,其中A、B、C是Access控制器的VIEW控制器已经在A的开头。这将打破链条,你不能从B>C移动到B,我们需要在B之前添加另一个导航控制器,比如说D,然后通过模型动画从A移动到D,间接移动到B。因此,流就像A>D->B>C。现在,进一步的导航流由第二个导航控制器处理,你能添加更多吗解释。是的,我添加了更多解释@Blip。