不能在代码中调用 segue (Swift)
Posted
技术标签:
【中文标题】不能在代码中调用 segue (Swift)【英文标题】:Cant call a segue in code (Swift) 【发布时间】:2014-09-24 18:17:53 【问题描述】:我在导航控制器中嵌入了一些视图。
我创建了一些 segues(一些从按钮到其他视图控制器,一些从一个视图控制器到另一个视图控制器。
例如,我有一个从一个按钮到名为 name2 的视图控制器的 segue(显示),当我按下按钮时效果很好,但是当我尝试以编程方式调用它时,应用程序崩溃并给出错误。
这就是我在 ViewController1
上调用 segue 的方式self.performSegueWithIdentifier("name2", sender: self)
这是从 ViewController1 到 ViewController2
我也有一个 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)
时,它可以正常工作。
有什么帮助吗?
【问题讨论】:
【参考方案1】:不要将 Storyboard Editor 中的 Button 连接到另一个 segue(当您想在 ViewController1 中调用 performWithSegue 函数时) - 只需将第一个 ViewController 连接到第二个。
然后就可以使用了
self.performSegueWithIdentifier("name2", sender: self)
在您的 ViewController1 类中。
【讨论】:
我还有另一个名为 name3 的 segue,就是这样。给出同样的错误。 你能把你的故事板截屏吗? 你能在故事板中选择你的视图控制器,然后点击身份检查器,然后发布它的样子吗? @PhillipMills 添加了一个。 显示您的 segue 详细信息的图像。【参考方案2】:当您将 Segue 从一个视图控制器设置到另一个时,请确保您已正确设置类 - 参见图片:
UIStoryBoardSegue 是我需要的。
【讨论】:
不管你是否已经回答了这个问题,我已经为那些认为你的答案没有帮助的人提供了另一种解决方案。感谢您的反对:) 您的回答没有回答我的问题,因此投了反对票。我明白你喜欢当一个孩子并拒绝投票给我:)【参考方案3】:错误表明您正在寻找ViewController2
中的转场,但您的问题表明转场来自按钮。这可以解释为什么找不到它。
【讨论】:
我不是在 ViewController2 中寻找 segue,我在 ViewController1 中调用它,其中一个按钮与 ViewController2 的 segue 相连 也许错误信息是错误的:'Receiver (ViewController2) has no segue with identifier 'name2'' 不管,如果segue属于一个按钮,它仍然不是@ 987654322@ 就视图控制器而言。 视图控制器也有一个名为 name3 的 segue,当我尝试调用该 segue 时会出现相同的错误【参考方案4】:尝试删除segue标识符(name),构建(cmd + b),然后设置segue标识符并编译。 (当然在故事板中)
【讨论】:
用你的视图控制器名称做同样的事情?【参考方案5】:好吧,答案是我很笨,
每当我创建新的 ViewControllers 时,我都会继承 ViewController
,这是我的第一个 ViewController,而不是 UIViewController
,这使得它可以递归运行。
【讨论】:
以上是关于不能在代码中调用 segue (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
如果用户已经使用 facebook 登录,则使用 swift 调用 segue
Swift 4:在 viewDidLoad 之后调用 prepare(for segue:)