2016-06-27 16 views
1

Ich habe 2 View-Controller. Der Main MainViewController und der Second ViewController.Switching Ansicht Controller in Swift

Der sekundäre Ansicht-Controller hat eine Warnung, die manchmal angezeigt wird, und wenn der Benutzer "Abbrechen" auswählt, möchte ich den mainMenuViewController anzeigen.

Wie kann ich dies mit Code erreichen?

Bisher habe ich habe folgende:

 let refreshAlert = UIAlertController(title: "You Win!", message: "Do you want to play again?", preferredStyle: UIAlertControllerStyle.Alert) 

     refreshAlert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: { (action: UIAlertAction!) in 
      self.restart() 
     })) 

     refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in 
      print("Handle Cancel Logic here") 
     })) 

     presentViewController(refreshAlert, animated: true, completion: nil) 

Wenn der Benutzer auf Abbrechen klickt, ich habe vorübergehend den Zeilendruck gedruckt („Handeln Logic Abbrechen hier“), aber ich brauche die mainMenuViewController zu werden aktiv.

Ich habe versucht, eine Funktion dafür zu schaffen, aber es wird nicht funktionieren, können Sie vorschlagen, warum?

@IBAction func quit(sender: UIBarButtonItem) { 
    let vc = mainMenuViewController() 
    self.presentViewController(vc, animated: true, completion: nil) 
} 

Jede Hilfe wird geschätzt!

+1

"aber es wird nicht funktionieren" Was bedeutet das? – matt

+0

Warum nicht die aktuelle ViewController-Funktion verwenden, anstatt diese Nachricht zu drucken? –

+0

Wenn ich die Funktion ausprobiere, wird ein vollständig schwarzer Bildschirm angezeigt, nicht der mainMenuViewController. Ich würde den presentViewController verwenden, aber ich teste den Wechsel des Ansichtscontrollers von einer Taste, um anzuzeigen, dass der Alarm eine lange Zeit braucht. Sobald ich die View-Controller durch Klicken auf eine Schaltfläche ändern kann, verschiebe ich diesen Code in die Alert-Funktion. – PabloEscobar

Antwort

2

Sie können den Initialisierer auf einer VC-Klasse nicht einfach initialisieren, VC. Es ist nicht der richtige Weg, es zu tun.

Ich nehme an, Sie haben ein Storyboard namens Main.storyboard. Wenn Sie keinen haben, erstellen Sie einen und fügen Sie MainViewController hinzu. Sie sollten Ihre MainViewController eine Kennung geben:

enter image description here

Zuerst müssen Sie Ihr Storyboard bekommen:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("mainVC") 

Jetzt vc ist die MainViewController! Sie können es durch presentViewController präsentieren.

Alternativ können Sie Segmente verwenden!

Verbinden Sie Ihre SecondaryViewController und MainViewController mit einem Segment. Geben Sie ihm eine Kennung und rufen

performSegueWithIdentifier("some identifier", sender: self) 
+0

Ich denke, Sie sollten es tun Verwenden Sie die Storyboard ID und nicht die Wiederherstellungs ID und wenn Sie letztere verwenden, müssen Sie das Kontrollkästchen aktivieren – Dopapp

+0

@Dopapp Ich versehentlich den Cursor dort bei der Erstellung des Screenshots und ich habe es nicht erkannt ... Jetzt behoben! – Sweeper

+0

Vielen Dank für der Ratschlag Ich habe das implementiert, aber es geht falsch über: Ich weiß nicht, wie der Name des Übergangs oder des Abschnitts heißt, aber es ist der gleiche Übergang, den Sie erhalten, wenn Sie in eine der Systemeinstellungen klicken (d Bluetooth) und dann erscheint eine Schaltfläche "Zurück" oben links in der Navigationsleiste - siehe Screenshot - https://imgur.com/VAbnPCI.Wissen Sie, wie ich den Übergang ändern oder die angezeigte obere Schaltfläche ausblenden kann im Bild? – PabloEscobar

0

In Swift 3 mit Storyboard:

  1. Geben Sie Ihre zweiten View-Controller ein storyboardID. (Vorausgesetzt, dass seine "secondVC" genannt)
  2. in der ersten Ansicht-Controller-Code, wenn Sie wechseln möchten, schreiben Sie:

    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let secondVC = storyBoard.instantiateViewController(withIdentifier: "secondVC") 
    self.present(mainVC, animated: true, completion: nil) 
    
Verwandte Themen