Sono nuovo a Swift e voglio sapere come chiudere il controller di visualizzazione corrente e passare a un'altra vista.Come chiudere il ViewController corrente e passare a un'altra vista in Swift
Il mio storyboard è simile al seguente: MainMenuView -> GameViewController -> GameOverView. Voglio chiudere il GameViewController per andare su GameOverView, non su MainMenuView.
Io uso il seguente codice nel mio 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()
}
Nel GameViewController, io uso questo codice, ma non elimina il GameViewController.
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView
self.presentViewController(nextViewController, animated:true, completion:nil)
Questo è il mio codice 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
}
}
Qualche suggerimento?
non funziona si dà un errore "Getter per 'presentingViewController' con selettore Objective-C conflitti 'presentingViewController' con getter per 'presentingViewController' da '' UIViewController superclasse con lo stesso selettore di Objective-C" i aggiornato il mio post in modo da poter vedere il mio codice per GameOverView – Michel
Prima di tutto, 'var presentandoViewController: UIViewController! = self.presentViewController' al di fuori di una funzione non funziona, devi dichiararlo e poi all'interno di 'viewDidLoad' lo istanziamo. Il tuo problema è che quando dichiari 'presentingViewController' come una proprietà memorizzata,' UIViewController' entra in conflitto con la sua propria 'presentViewViewontroller', soluzione: cambia il nome. Il codice sopra è da chiamare all'interno di una funzione per evitare questo tipo di conflitti. –
Grazie per l'aiuto è tornato a MainMenu ma il GameViewController non è stato rimosso, ma la memoria non è stata rilasciata – Michel