Подтвердить что ты не робот

Как отклонить текущий ViewController и перейти к другому представлению в Swift

Я новичок в Swift, и я хочу знать, как убрать текущий контроллер и перейти к другому представлению.

Моя раскадровка похожа на следующее: MainMenuView → GameViewController → GameOverView. Я хочу отклонить GameViewController, чтобы перейти в GameOverView, а не в MainMenuView.

Я использую следующий код в своем MainMenuView:

@IBAction func StartButton(sender: UIButton) {
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameViewController") as! GameViewController
    self.presentViewController(nextViewController, animated:true, completion:nil)
    restGame()
}

В GameViewController я использую этот код, но он не отклоняет GameViewController.

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView
self.presentViewController(nextViewController, animated:true, completion:nil)

Это мой код GameOverView:

class GameOverView: UIViewController{
    // save the presenting ViewController
    var presentingViewController :UIViewController! = self.presentViewController

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func ReplayButton(sender: UIButton) {
        restGame()
        didPressClose()
    }
    @IBAction func ReturnMainMenu(sender: UIButton) {
        Data.GameStarted = 1
        self.dismissViewControllerAnimated(false) {
            // go back to MainMenuView as the eyes of the user
            self.presentingViewController.dismissViewControllerAnimated(false, completion: nil);
        }
       /* let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("MainScene") as! MainScene
        self.presentViewController(nextViewController, animated:true, completion:nil)*/

    }
    func restGame(){
        Data.score = 0
        Data.GameHolder = 3
        Data.GameStarted = 1
        Data.PlayerLife = 3.0
        Data.BonusHolder = 30
        Data.BonusTimer = 0
    }
    func didPressClose()
    {
        self.self.dismissViewControllerAnimated(true, completion:nil)
    }
    override func shouldAutorotate() -> Bool {
        return false
    }

    deinit{
        print("GameOverView is being deInitialized.");

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }


}

Любые предложения?

4b9b3361

Ответ 1

Что вы можете сделать, это показать GameOverView, в конце концов, когда вы представляете его, GameViewController находится ниже в иерархии, а затем в вашем GameOverView запустите следующий код, чтобы закрыть оба, когда вы хотите отклоните GameOverView, как показано ниже:

@IBAction func ReturnMainMenu(sender: UIButton) {
    // save the presenting ViewController
    var presentingViewController: UIViewController! = self.presentingViewController

    self.dismissViewControllerAnimated(false) {
          // go back to MainMenuView as the eyes of the user
          presentingViewController.dismissViewControllerAnimated(false, completion: nil)
    }
}

Вышеупомянутый код необходимо вызвать, если вы хотите отклонить GameOverView.

Надеюсь, это поможет вам.

Ответ 2

Ниже приведен код, который приведет вас к главному VC, здесь проверенный фрагмент кода.

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)