Ich bin neu bei Swift und ich möchte wissen, wie man den aktuellen View-Controller abstellt und zu einer anderen Ansicht geht.Wie man den aktuellen ViewController abstellt und zu einem anderen View in Swift geht
Mein Storyboard ist wie folgt: MainMenuView -> GameViewController -> GameOverView. Ich möchte den GameViewController schließen, um zum GameOverView zu gelangen, nicht zum MainMenuView.
Ich verwende den folgenden Code in meinem 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()
}
Im GameViewController ich diesen Code verwenden, aber es nicht die GameViewController entlassen.
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView
self.presentViewController(nextViewController, animated:true, completion:nil)
Dies ist mein GameOverView Code:
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
}
}
Irgendwelche Vorschläge?
es funktioniert nicht ein Fehler „Getter für‚presentingViewController‘mit Objective-C-Selektor‚presentingViewController‘Konflikte mit Getter für‚presentingViewController‘von Super‚UIViewController‘mit dem gleichen Objective-C-Selektor“ i geben Mein Beitrag wurde aktualisiert, so dass Sie meinen Code für GameOverView sehen können. – Michel
Zuerst, 'var presentingViewController: UIViewController! = self.presentViewController 'außerhalb einer Funktion funktioniert nicht, Sie müssen es deklarieren und dann in Ihrem' viewDidLoad' instanziieren. Ihr Problem besteht darin, dass, wenn Sie 'presentingViewController' als gespeicherte Eigenschaft deklarieren, der' UIViewController' Konflikte mit seiner eigenen 'presentingViewController'-Lösung verursacht: Ändern Sie den Namen. Der obige Code soll innerhalb einer Funktion aufgerufen werden, um diese Art von Konflikten zu vermeiden. –
Danke für die Hilfe, die es auf MainMenu zurück, aber der GameViewController ist noch nicht entlassen, der Speicher wurde nicht freigegeben – Michel