无法以编程方式执行 segue

Posted

技术标签:

【中文标题】无法以编程方式执行 segue【英文标题】:Cannot programmatically perform segue 【发布时间】:2014-04-14 04:51:13 【问题描述】:

我有一个故事板转场,其标识符为“Push to ResumeView”。

我尝试在我所在的 ViewController 中调用它,方法是

[self performSegueWithIdentifier: @"Push to ResumeView" sender: self];.

但是什么都没有发生?

我宁愿只使用顶部 NavigationController 或其他东西推送 ViewController,但我也看不出如何做到这一点。

【问题讨论】:

就像你说的那样使用你的导航控制器,[self.navigationController pushViewController:vc animated:YES]; 给我看你的故事板截图并检查你的标识符,最好使用正确的标识符命名约定而不是使用空格 @"Push to ResumeView" : 删除标识符中的空格 我改了名字,截图i.imgur.com/LgQIl3G.png 另外,这是我的代码的一部分,这一行是我尝试调用推送视图控制器的那一行。我认为问题在于我使用的是self.navigationController 而不是故事板中定义的顶部导航控制器。所以这就是为什么它什么也没做。但我不确定github.com/AndrewSB/wwdc-scholarship-app/blob/master/FBCall/… 【参考方案1】:

尝试在“来自”视图控制器中实现shouldPerformSegueWithIdentifier:sender:prepareForSegue:sender: 方法。在方法中放置一个断点或 NSLog() 以检查 segue 标识符。这将证明您确实在情节提要中正确设置了转场。

如果您想手动将下一个视图控制器推送到导航控制器的顶部,请使用pushViewController:animated:。但是,如果您使用情节提要,首选方法是使用 segue。

【讨论】:

我添加了一个 shouldPerformSegueWithIdentifier,其中包含一个 NSLog,但它没有触发。所以我认为我如何做segue有问题?这是那行github.com/AndrewSB/wwdc-scholarship-app/blob/master/FBCall/… 嗯...我想你只是从不打电话给pushresume :) 但是方法顶部的 NSLog 输出推送恢复,在我的控制台中。所以我知道该方法被调用 尝试实现prepareForSegue:sender:。我忘记了 shouldPerformSegueWithIdentifier:sender: 在您以编程方式触发 segue 时不会被调用。 在 ViewController 中实现,没有断点...所以我不是调用 segue 吗?【参考方案2】:

试试这个。

UIViewController *yourResumeView=[self.storyboard instantiateViewControllerWithIdentifier:@"PushToResumeView"];
[self.navigationController pushViewController:yourResumeView animated:YES];

【讨论】:

以上是关于无法以编程方式执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 Xib 执行 Segue

以编程方式执行 unwind segue

以编程方式从 UIView 执行 Segue

以编程方式定义和执行 segue

如何以编程方式从 TableView 执行 segue

以编程方式选择 tableview 上的单元格不会执行关联的 segue