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:GameOVerViewController
从GameViewController
到GameOverViewController
设置(推送)触发的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> 的内容?