UIViewController不会转到另一个UIViewController?

时间:2016-12-03 04:41:36

标签: ios swift uiviewcontroller segue

我的GameViewController包含一个SCNView。我可以转到我的GameViewController,但是当我的玩家死亡时,我试图转向我的GameOverVC,但它不会消失。我知道正在调用代码,因为我在控制台上打印了一些内容。 segue在故事板中设置。

enter image description here

我打电话给

self.performSegue(withIdentifier: "gameOver", sender: self)

我已在多个应用中完成此操作,但我无法弄清楚为什么这不起作用。这是我第一个使用SceneKit的应用程序,所以我不知道这是否有任何改变,但任何帮助都表示赞赏!

同时

如果我尝试

let vc = self.view.window?.rootViewController

vc?.present(GameOverVC(), animated: true, completion: nil)

然后它确实呈现了UIViewController,但它没有显示我在该视图中添加的任何内容?

2 个答案:

答案 0 :(得分:1)

segue适用于UIVIewControllers,不适用于SpriteKit scenes。所以,你需要从parent viewcontroller执行segue,所以你可以做类似的事情,

 self.parentViewController.performSegue(withIdentifier: "gameOver", sender: self)

或者如@ZeMoon in this answer所述,您可以在viewcontroller课程中设置SKScene的属性,并且可以对此属性执行segue,例如,

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

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

  scene.viewController = self

现在你可以执行segue了,

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

OR

忘记segue只是实例化你的GameOverVC并将其推送到导航控制器上,例如,

    let nav = self.view.window?.rootViewController as! UINavigationController

    nav.pushViewController(gameOverVC, animated: true)

或者

   self.navigationController?.pushViewController(gameOverVC, animated: true)

答案 1 :(得分:0)

您可以尝试以下操作: -

UIViewController *vc = self.view.window.rootViewController;
[vc performSegueWithIdentifier:@"id" sender:nil];