我有一个登录 View 。如果登录成功,我想要我的程序,导航到主窗口。
我在登录 View 和主视图之间使用了模态转场。
但是,在到达主视图后,我想使用 push segues,不幸的是我遇到了以下异常:
Terminating app due to uncaught exception 'NSGenericException', reason:
'Could not find a navigation controller for segue 'routeList'.
Push segues can only be used when the source controller is managed by an
instance of UINavigationController.'
这是我在“登录 Controller ”中为“模态转场”提供的命令的功能:
//LoginController.m
- (IBAction)loginTapped:(id)sender {
[self performSegueWithIdentifier:@"login" sender:@{@"foo": @"bar"}];
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"login"])
{
MainController *vc = segue.destinationViewController;
vc.uuid = userUuid;
}
}
以下是我用来在“主 Controller ”中执行“push segue”的函数。我想在这里执行 push segue,但我在这部分遇到了异常。
//MainController.m
- (IBAction)actionGo:(id)sender {
[self performSegueWithIdentifier:@"routeList" sender:self];
}
事实上,我在“登录 View ”之前有一个导航 Controller 。那么为什么它找不到“导航 Controller ”呢?
如果我使用模态转场,它就可以工作。那么为什么它不适用于 push segue 呢?
编辑 1 - 我的 Storyboard:
编辑 2 - 建议将主 Controller 嵌入到导航 Controller 中(单击 routeList segue 的源 Controller ,然后在编辑器菜单下选择嵌入 > 导航 Controller )。现在,我的 Storyboard如下所示,我现在正面临这个错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[UINavigationController setUuid:]: unrecognized selector sent to
instance 0x17da9df0'
我正在将值从登录 Controller 传递到主 Controller 。当我添加一个导航 Controller 时,我无法传递这个值。我怎样才能传递这个值?
MainController 嵌入到导航 Controller 时的 Storyboard:
我的话解决方案:
感谢在此线程中分享他们答案的人 :) 我解决了这个问题。在导航 Controller 堆栈中, 如果我放置一个模态 segue,链接会以某种方式断开,其余 View 不属于导航 Controller 。所以,我把所有的segues都做成了“push style”。然后在 MainController.m 我删除了后退按钮,如下所示:
-(void)viewDidAppear:(BOOL)animated{
[self.navigationItem setHidesBackButton:YES animated:NO];
}
最佳答案
它不起作用,因为您正在从一个 Controller 中触发 routeList
segue,该 Controller 以模态方式呈现且不包含在导航 Controller 中。
您可能想要交换层次结构,以便主视图位于作为窗口 Root View Controller 的导航 Controller 中,并且登录屏幕以模态方式呈现(并在登录完成时关闭)。
从不同的东西开始:删除所有模态转场并让它们推送。接下来,在主视图 Controller 中,实现 viewDidAppear:
以获取导航 Controller 并将其 View Controller 设置为 @[ self ]
(这将删除登录 View Controller ) .这应该可以解决您的紧迫问题。
关于ios - 程序在 PerformSegueWithIdentifier 中断以进行推送转场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124439/