2017-01-23 2 views
0

diesen Code verwenden ich in der Lage bin zu ‚Segue‘ auf der gleichen Instanz meiner Ansicht-ControllerDaten mit einem PushViewController übergeben?

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewController(withIdentifier: "DetailVC") 
    self.navigationController?.pushViewController(vc, animated: true) 


} 

Wie aber gehe ich Daten über? Ich weiß nur, wie man Daten mit der Option segue weitergibt. Wenn ich den Code damit ausführe, erhalte ich keine Fehler, weil der neue instanziierte View-Controller die Daten nicht lesen kann.

Antwort

1

Was Sie verwenden, ist kein Übergang. Dies ist nur eine neue Instanz (nicht die gleiche) des View-Controllers auf den Nav-Stack.

segue, in Ihrem Storyboard können Sie ziehen Sie einfach einen Link aus der Zellsammlung im Hinblick auf den View-Controller, dann Daten zuweisen in der prepareForSegue Methode ...

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let viewController = segue.destinationViewController as? DetailVC { 
     viewController.someProperty = self.someProperty 
    } 
} 
+0

Ch diese antwort, denn obwohl alle antworten technisch korrekt sind, war dies der einzige, der zeigte, dass ich "selbst" verwenden musste, um die gleichen werte zu erreichen, was das eigentliche problem war – baxu

3

Erstens. Dies ist kein segue. Dies drückt nur eine andere Ansicht auf den Stapel. Und (wie Ashley Mills sagt) ist dies nicht die gleiche Instanz, in der Sie sich gerade befinden. Dies ist eine NEUE Instanz eines View-Controllers.

Aber alles, was Sie tun müssen, ist die Daten zu füllen. Sie haben bereits den Controller hier ...

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    // you need to cast this next line to the type of VC. 
    let vc = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC // or whatever it is 
    // vc is the controller. Just put the properties in it. 
    vc.thePropertyYouWantToSet = theValue 

    self.navigationController?.pushViewController(vc, animated: true) 
} 
2

In DetailVC eine Variable erstellen und zuweisen Wert, während Sie eine object erstellen. Überprüfen Sie folgende Beispiel:

class DetailVC { 
var dataString: String? 
} 

Pass-Daten wie folgt:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewController(withIdentifier: "DetailVC") 
    vc.dataString = "PASS THE DATA LIKE THIS" 
    self.navigationController?.pushViewController(vc, animated: true) 


} 
2

zum Beispiel füge ich hier für eine detaillierte Beschreibung Sie das Tutorial bekommen von here

class SecondViewController: UIViewController { 

var myStringValue:String? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    // We will simply print out the value here 
    print("The value of myStringValue is: \(myStringValue!)") 
} 

und die Zeichenfolge senden als

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! SecondViewController 
     vc.myStringValue = "yourvalue" 

    self.navigationController?.pushViewController(vc, animated: true) 


} 
Verwandte Themen