斯威夫特执行segue没有点击按钮

问题描述:

我在SpriteKit做一个小游戏,我有一个布尔值存储,检查是否是第一次用户玩我的游戏。如果是这样,我希望应用将他重定向到另一个视图控制器,并在其中输入他的角色名称。斯威夫特执行segue没有点击按钮

但是,我无法让我的应用程序这样做。

在我的 “GameViewController.swift” 我有这样的代码:

override func viewDidLoad() { 
    super.viewDidLoad() 

    checkGame() 

    if let view = self.view as! SKView? { 

     // Load the SKScene from 'GameScene.sks' 
     if let scene = SKScene(fileNamed: "GameScene") { 
      // Set the scale mode to scale to fit the window 
      scene.scaleMode = .aspectFill 

      // Present the scene 
      view.presentScene(scene) 
     } 

     view.ignoresSiblingOrder = true 

     view.showsFPS = true 
     view.showsNodeCount = true 
    } 
} 

func checkGame() { 
    //Check game 
    let firstPlay:Bool = appData.bool(forKey: "\(GameData.firstPlay)") 
    print(firstPlay) 

    if firstPlay == false { 
     print("Heading for setup") 
     self.performSegue(withIdentifier: "GoToSetup", sender: nil) 
    } 
} 

然而, “设置视图 - 控制” 未加载。我可以通过点击按钮来控制赛格,但那不是我想要的。我希望它在视图加载后立即发生。

任何想法?

可以通过编程调用以下配置的SEGUE:

self.performSegueWithIdentifier("segueId", sender: self); 

我不知道你所说的“设置视图 - 控制”不装”的意思,但通常我们不会在执行塞格斯。viewDidLoad这时,认为刚刚被加载到内存中,并没有出现在这个时候执行赛格瑞是种奇怪的事情

,我建议你在viewDidAppear()执行SEGUE:。

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated: animated) 
    performSegue(withIdentifier: "GoToSetup", sender: nil) 
} 

如前所述,在viewDidLoad阶段UIViewController不能完成任何UI交互,并执行Segue,因为视图不在视图层次结构中。您可以在viewDidAppear(animated:Bool)处执行此操作。

+0

这是什么给Sweeper的答案增加了什么?这是对现有答案的“我同意”评论,因为它没有提供任何其他信息。 –