ios - 在 SKScene 中转至 UIViewController

标签 ios swift sprite-kit segue

在我的 GameScene.swift 文件中,我正在尝试像这样执行转回到我的菜单 View Controller :

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,只能访问包含它的 View 。您需要手动创建指向它的指针。这可以通过为 SKScene 创建一个属性来完成:

class GameScene: SKScene {
    weak var viewController: UIViewController?
    ...
}

然后,在 viewController 类中,就在 skView.presentScene(scene)

之前
scene.viewController = self

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

func returnToMainMenu(){
    viewController?.performSegueWithIdentifier("menu", sender: vc)
}

关于ios - 在 SKScene 中转至 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053436/

相关文章:

ios - 如何调试重载篮板?

ios - 无法设置 UICollectionView 的动态初始内容

ios - NSDate dateByAddingUnit 强制选项 - nil 不编译

ios - swift 3 :Closure use of non-escaping parameter may allow it to escape

ios - 在 Xcode 中禁用/启用按钮

ios - Spritekit : Pausing parent node does not pause child node

objective-c - NSURLConnection 中的保证顺序

ios - iPhone X 安全区域似乎位于不透明工具栏下方

sprite-kit - Sprite Kit 在屏幕外从父级中删除 SKNode

swift - SKScene 中的 subview - Swift