无法在代码中调用segue(Swift)

8

我有几个嵌入导航控制器的视图。

我创建了一些segue(从按钮到其他视图控制器,从一个视图控制器到另一个视图控制器)。

例如,我有一个segue(Show),从一个按钮到一个名为name2的视图控制器。当我按下按钮时,它运行得很好,但是当我尝试以编程方式调用它时,应用程序会崩溃并显示错误。

这是我在ViewController1上调用segue的方式:

self.performSegueWithIdentifier("name2", sender: self)

这是从ViewController1ViewController2的内容。

我也有一个segue,它不是连接到按钮,而是从vc1到vc2,但却产生了同样的错误。

这是我得到的奇怪错误:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (ViewController2) has no segue with identifier 'name2''

我试过清理产品并重置模拟器。
我的故事板的截图
viewcontroller1的身份检查器的屏幕(它在我的项目中实际上被称为ViewController)
segue(name3)的屏幕截图
segue的选项:
编辑: 我发现当我将按钮连接为IBAction,然后从按钮调用performSegueWithIdentifier("LogIn", sender: self)时,它可以正确工作。
任何帮助?
5个回答

2

当您从一个视图控制器设置Segue到另一个视图控制器时,请确保已正确设置类 - 请参见下图:

enter image description here

UIStoryBoardSegue是我需要的。


1
无论您是否已经回答了这个问题,我为那些没有找到您的答案有帮助的人提供了另一种解决方案。感谢您的负评 :) - Phil Hudson
1
你的回答并没有回答我的问题,所以我给你点了个踩。我知道你喜欢耍小孩子气,所以也给我点了个踩 :) - Eli Braginskiy

2
不要在Storyboard编辑器中将您的按钮连接到其他segue(当您想在ViewController1中调用performWithSegue函数时)-只需将第一个视图控制器连接到第二个即可。然后,您可以使用。
self.performSegueWithIdentifier("name2", sender: self)

在您的ViewController1类中。


我有另一个叫做name3的segue,它完全一样。会出现相同的错误。 - Eli Braginskiy
你能否在Storyboard中使用segues选择你的视图控制器,点击身份检查器,并发布一个它的外观图片吗? - Phillip Mills
显示你的segue细节图像。 - derdida
这里有点奇怪。应该还有其他的Segue类型(如果你正在使用NavigationController,请使用目标为“Current”的push)- “Segue”选项中有哪些选项? - derdida
@derdida 我添加了一张图片。 - Eli Braginskiy
显示剩余5条评论

0
错误提示你正在寻找从 ViewController2 发起的segue,但是你的问题中指出segue来自一个按钮。这就解释了为什么它找不到。

我不是在ViewController2中寻找segue,而是在ViewController1中调用它,在那里一个按钮与ViewController2连接了一个segue。 - Eli Braginskiy
也许错误信息是错误的:'接收器(ViewController2)没有标识符为'name2'的segue'。无论如何,如果segue属于按钮,对于视图控制器来说仍然不是self - Phillip Mills
视图控制器还有一个名为name3的segue,当我尝试调用该segue时出现相同的错误。 - Eli Braginskiy

0
尝试移除Segue标识符(名称),进行构建(cmd + b),然后设置Segue标识符并编译。(当然是在Storyboard中)

用你的视图控制器名称做同样的事情? - Aymenworks

0

好的,答案是我相当愚蠢,
每当我创建新的 ViewControllers 时,我都是以我的第一个 ViewController 作为子类,而不是以 UIViewController 作为子类,这使得它运行递归。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接