UIViewController不会延续到另一个UIViewController?
我有我的GameViewController包含一个SCNView。我可以继续使用我的GameViewController,但是当我的玩家死亡时,我尝试继续使用我的GameOverVC,但它不会继续。我知道代码被调用,因为我打印了一些东西给控制台。故事板中设置了segue。UIViewController不会延续到另一个UIViewController?
我Segue公司通过调用
self.performSegue(withIdentifier: "gameOver", sender: self)
我已经在多个应用做到了这一点,但我不明白,为什么这是行不通的。这是我与SceneKit的第一个应用程序,所以我不知道这是否会改变任何东西,但任何帮助表示赞赏!
此外
如果我尝试
let vc = self.view.window?.rootViewController
vc?.present(GameOverVC(), animated: true, completion: nil)
然后它呈现的UIViewController,但它并没有显示任何东西我都在视图中添加?
不知何故,我遇到了同样的问题,打电话来救我: 我做了这样的事情:
DispatchQueue.main.asyncAfter(deadline: .now()) {
self.performSegue(withIdentifier: "gameOver", sender: self)
}
如果你需要从对象继承的类,你需要将parentViewController的ref传递给你的对象,并拨打电话,是不是一个视图控制器来Segue公司像这样:
DispatchQueue.main.asyncAfter(deadline: .now()) {
parentViewController.performSegue(withIdentifier: "gameOver", sender: self)
}
这解决了我的问题!我不确定为什么像@Lion这样的常规方法这次没有发挥作用,但我希望有人能告诉我为什么必须按照我的情况这样做。 –
这个问题需要我几天。我不知道为什么普通segue不工作。如果你明白它为什么这样工作,让我知道... –
您可以尝试以下操作: -
UIViewController *vc = self.view.window.rootViewController;
[vc performSegueWithIdentifier:@"id" sender:nil];
当我尝试这个我的应用程序崩溃并打印'接收器(
你可以在场景中获取scene.viewcontroller对象吗?如果是,那么执行对该对象的争夺。 –
不,我不明白 –
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)
没有这些在我的情况下工作 –
更新你的问题,你的故事板,你把继续。 –
它的名字?或者你的意思是一张图片? –
图片显示segue标识符 –