2016-10-10 7 views
0

Ich bin ziemlich neu mit Swift und ich mache diese Mini - Spiel App, die die Punktzahl zählt und aktualisiert das Etikett in der Controller anzeigen. Ich möchte dieses Ergebnis von einem View-Controller in einen anderen externen Popup-View-Controller übertragen, den ich erstellt habe.Wie gebe ich Daten von einem View - Controller in meinen Popup - View - Controller (swift/ios)

@IBAction func Button7Tapped(_ sender: AnyObject) 
    { 
     if Index == 13 { 
      game.score += 1 
     } else { 
      let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

      self.addChildViewController(scorepopVC) 
      scorepopVC.view.frame = self.view.frame 
      self.view.addSubview(scorepopVC.view) 
      scorepopVC.didMove(toParentViewController: self) 
     } 
     updateGame() 
    } 

Oben ist mein Code für die externe Pop-up-View-Controller-I erstellt, die auch .swift Datei eine getrennt hat. Wie würde ich meine game.score nehmen und diese in meinen Popup-View-Controller übergeben?

+0

Sie sollten eine angemessene Antwort akzeptieren, wenn es Ihr Problem gelöst hat. – Majster

Antwort

0

Es ist besser, Storyboard zum Öffnen des ViewControllers zu verwenden. Im Storyboard klicken Sie mit der rechten Maustaste und ziehen Sie von der Schaltfläche zum zweiten Ansichtscontroller (der, den Sie öffnen möchten).

Wählen Sie den gewünschten Segmenttyp aus. In deinem Fall denke ich, dass Present Modally gut funktionieren wird.

enter image description here

Sie eine Linie zwischen den beiden UIViewControllers in Storyboard sehen. Das ist der Übergang. Tippe darauf. Geben Sie im Attribute-Inspektor dem Segment eine Kennung. Zum Beispiel "myFirstSegue".

enter image description here

Dann im Code des UIViewController das Ihre Schaltfläche Überschreiben vorbereiten (für: Absender :). Diese Methode wird aufgerufen, wenn Sie sich darauf vorbereiten, dass der Übergang stattfindet. I.o.w wenn Sie auf den Knopf tippen. Sie haben Zugriff auf den Ziel-UIViewController und können dafür auf die Eigenschaften zugreifen und diese setzen.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "myFirstSegue" { 
     if let vc = segue.destination as? MyViewController { 
      //here you set your data on the destination view controller 
      vc.myString = "Hello World" 
     } 
    } 
} 

Beachten Sie, dass wir die Kennung zu überprüfen, da alle segues, die von diesen Viewcontroller zu anderen Viewcontrollers gehen werden vorbereitet rufen (für: Absender :)

+1

Sie überführen das Hinzufügen eines untergeordneten Ansichtscontrollers wie in seinem Codebeispiel. – Majster

0

In Ihrer finalScoreViewController swift Datei eine neue Eigenschaft hinzuzufügen.

final class FinalScoreViewController: UIViewController { 
    var score: Int? 


} 

Und dann einfach zuweisen, wenn Sie es instanziieren.

@IBAction func Button7Tapped(_ sender: AnyObject) { 
    if Index == 13 { 
     game.score += 1 
    } else { 
     let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

     scorepopVC.score = game.score //THIS LINE 

     self.addChildViewController(scorepopVC) 
     scorepopVC.view.frame = self.view.frame 
     self.view.addSubview(scorepopVC.view) 
     scorepopVC.didMove(toParentViewController: self) 
    } 
    updateGame() 
} 
0

Es ist ganz einfach, nur eine Eigenschaft in Ihrem finalScoreViewController hinzufügen (wenn Sie dies nicht bereits geschehen) und -für Beispiel- Punktzahl zu nennen:

class finalScoreViewController: UIViewController { 

    var score: String? 

    // ... 

Fügen Sie diese Zeile auf die Button7Tapped Aktion (wo man auf einen Wert für finalScoreViewController Partitur):

let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

     // add this line: 
     scorepopVC.score = "My score" 


     self.addChildViewController(scorepopVC) 
     scorepopVC.view.frame = self.view.frame 
     self.view.addSubview(scorepopVC.view) 
     scorepopVC.didMove(toParentViewController: self) 

schließlich in finalScoreViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let scr = score { 
     print(scr) 
    } 
} 

Hoffnung, die geholfen hat.

+1

Zusätzlicher Hinweis: * Namenskonventionen *, Sie sollten die Popup-Klasse "FinalScoreViewController" anstelle von "finalScoreViewController" aufrufen (oberer Kamelfall für Klassennamen). –

+0

@Antonio Chan Hier ist ein Swift Style Guide, den Sie vielleicht interessant finden https://github.com/raywenderlich/swift-style-guide –

Verwandte Themen