Je suis nouveau sur Swift et je veux savoir comment fermer le contrôleur de vue actuel et passer à une autre vue.
Mon storyboard est le suivant: MainMenuView -> GameViewController -> GameOverView. Je veux ignorer le GameViewController pour accéder au GameOverView, pas au MainMenuView.
J'utilise le code suivant dans mon 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()
}
Dans le GameViewController, j'utilise ce code, mais il ne rejette pas le GameViewController.
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView
self.presentViewController(nextViewController, animated:true, completion:nil)
Voici mon code 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
}
}
Aucune suggestion?
Ce que vous pouvez faire est de laisser le GameOverView
être présenté, après tout lorsque vous le présentez, le GameViewController
est en dessous dans la hiérarchie, puis dans votre GameOverView
exécutez le code suivant pour fermez les deux lorsque vous voulez fermer le GameOverView
, comme de la manière suivante:
@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)
}
}
Le code ci-dessus doit être appelé lorsque vous souhaitez supprimer le GameOverView
.
J'espère que cela vous aidera.
Le code ci-dessous vous amènera au VC principal, voici un morceau de code éprouvé.
self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)