iOS - 如何在不按下按钮的情况下在视图控制器之间移动

Posted

技术标签:

【中文标题】iOS - 如何在不按下按钮的情况下在视图控制器之间移动【英文标题】:iOS - how to move between view controllers without a button press 【发布时间】:2015-07-31 18:10:02 【问题描述】:

我正在努力将 UI 视图控制器更改为游戏结束屏幕,我计划在此屏幕上显示得分、重置和广告。我将向您展示我已经拥有的代码,然后我将在下面列出我的项目是如何设置的。

游戏会运行,但是一旦检测到接触就会出现崩溃状态

Thread 1 EXC_BAD_INSTRUCTION (code=EXC1386_INVOP,subcode=0x0)

这是我目前使用的代码...

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate 

var viewController: GameViewController!
var secondViewController: GameOverViewController!


override func didMoveToView(view: SKView) 

//lots of code here

func didBeginContact(contact: SKPhysicsContact) 

    if( moving.speed > 0 ) 
        moving.speed = 0;

self.viewController.performSegueWithIdentifier("GameOverViewController", sender: self)


我目前有以下设置:

我的两个视图控制器文件GameViewController.swift & GameOverViewController.swift 除了我当前的 GameViewController 视图之外,我的故事板上还有一个新的视图控制器,具有以下属性....Class:GameOverViewController & Storyboard ID:GameOVerViewControllerGameViewControllerGameOverViewController 设置(推送)触发的segue 然后在我的 GameScene.Swift 文件中包含以下代码

如果有人可以帮助我,那就太好了。

谢谢。

【问题讨论】:

我试过 'performSegueWithIdentifier("secondViewController", sender: nil)' 请编辑您的问题以包含此信息,以及您收到的错误消息的直接引用。我还建议包含比您的小样本更多的上下文。 【参考方案1】:

performSegue:withIdentifier: 应该可以工作,除非您没有正确设置故事板。

您在执行performSegue:withIdentifier: 时遇到什么错误?

您是否在故事板中设置了连接两个视图控制器的转场,并且该转场是否有一个名为 secondViewcontroller 的标识符?

看看这个Storyboard tutorial。

【讨论】:

您好,我已经编辑了帖子以包含更多信息,我得到的崩溃错误是Thread 1 EXC_BAD_INSTRUCTION (code=EXC1386_INVOP,subcode=0x0) 将 perform segue 行替换为以下行...var vc:UIViewController! = self.view?.window?.rootViewController?.presentedViewController! vc.performSegueWithIdentifier("GameOver", sender: nil)【参考方案2】:

也许您正在尝试在没有导航堆栈的情况下推送视图控制器,如果是这种情况,请尝试以模态方式呈现您的视图控制器,并检查您是如何连接 segue 的。对不起我的英语不好。

【讨论】:

【参考方案3】:

将 performSegue 调用更改为

 self.viewController.performSegueWithIdentifier("DOES_NOT_EXIST", sender: self)

然后重新测试。你得到同样的错误吗?如果是这样,你没有正确命名你的segue。 Interface Builder 中设置的 segue 名称必须与您尝试在代码中调用的 segue 名称完全匹配。要解决此问题:在界面构建器中选择 segue,将标识符框读取为正确的名称,更新您的 performSegue 调用以准确使用该字符串并重建。 (如果您在 Interface builder 中更新标识符,请确保在重建之前清理项目以确保拾取新符号)。

但是,如果测试导致不同的错误,“'Receiver has no segue with identifier 'DOES_NOT_EXIST'”,那么您原来的 perform segue 调用工作正常。把它放回原来的样子。其他原因导致您的崩溃。

【讨论】:

感谢您的评论,我检查了 Segue 标识符,一切似乎都匹配。我真的被这个卡住了,你能在 GitHub 上查看我的项目吗?这是一个链接https://github.com/rich84ts/Ginger-Cat/blob/master/Ginger%20Cat/GameScene.swift#L312 该链接概述了代码所在的行。 当你尝试我描述的实验时发生了什么?你收到同样的错误吗?还是“no segue identifier”错误? 这很奇怪,在模拟器上我收到同样的错误,但是当我使用我的手机时,我以前从未见过的文件上显示了一个不同的错误(0 函数签名专业化)Thread 1: EXC_Breakpoint (code =1, subcode=0x10072d474有什么想法吗?

以上是关于iOS - 如何在不按下按钮的情况下在视图控制器之间移动的主要内容,如果未能解决你的问题,请参考以下文章

如何在不按下按钮的情况下自动处理 <textarea> 的内容?

如何在此扩展程序中创建一个按钮,在不使用操作按钮的情况下在主应用程序中打开特定视图?

当视图在iOS中加载时如何在缩放时显示用户当前位置?

如何在不使用 segue 的情况下在视图控制器之间传递图像

如何在不使用单例的情况下在多个视图控制器之间传递数据?

视图控制器 IOS 视图间切换