ios – 在SKScene中使用UIViewController

ios – 在SKScene中使用UIViewController,第1张

概述在我的GameScene. swift文件中,我正在尝试将segue执行回我的菜单视图控制器,如下所示: func returnToMainMenu(){ var vc: UIViewController = UIViewController() vc = self.view!.window!.rootViewController! vc.performSegueWithI 在我的GameScene. swift文件中,我正在尝试将segue执行回我的菜单视图控制器,如下所示:

func returnToMainMenu(){    var vc: UIVIEwController = UIVIEwController()    vc = self.vIEw!.window!.rootVIEwController!    vc.performSegueWithIDentifIEr("menu",sender: vc)}

点击节点时会运行此方法:

overrIDe func touchesEnded(touches: NSSet,withEvent event: UIEvent) {    for touch: AnyObject in touches {        let location = touch.locationInNode(self)        if gameOn == false{            if restartBack.containsPoint(location){                self.restartGame()            }            else if menuBack.containsPoint(location){                self.returnToMainMenu()            }            else if justBegin == true{                self.restartGame()            }        }    }}

menuBack是返回菜单的按钮.每次运行此代码时,都会抛出NSException:

Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: 'Receiver (<ProxyBlock.Menu: 0x165a3e90>) has no segue with IDentifIEr 'menu''

我检查了我的segue的标识符,它确实是“菜单”.

解决方法 您正在根vIEwController上调用segue.我认为这就是问题所在.你需要在场景的vIEwController上调用segue(我假设你创建了segue,因此它没有在根vIEwController上找到).

现在问题是SKScene没有直接访问它的vIEwController,而只是它包含它的视图.您需要手动创建指向它的指针.这可以通过为SKScene创建属性来完成:

class GameScene: SKScene {    var vIEwController: UIVIEwController?    ...}

然后,在vIEwController类中,就在skVIEw.presentScene(scene)之前

scene.vIEwController = self

现在,您可以直接访问vIEwController.只需在此vIEwController上调用segue:

func returnToMainMenu(){    self.vIEwController.performSegueWithIDentifIEr("menu",sender: vc)}
总结

以上是内存溢出为你收集整理的ios – 在SKScene中使用UIViewController全部内容,希望文章能够帮你解决ios – 在SKScene中使用UIViewController所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1077278.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存