2015-07-08 16 views
5

Ich habe drei View Controller (VC1, Parent View Controller und Child View Controller). Wie übermittle ich Daten vom VC1 an den untergeordneten View-Controller, wenn das ParentVC geladen ist? Normalerweise würde ich in der Lage sein, dies in dem ersten View-Controller würdeÜbergeben von Daten vom View Controller zum Child Controller in Swift

var text = "Hello" 
var sVC = SecondViewController() 
sVC.string = text 

und es Hello auf die Variable string in den zweiten View-Controller passieren zu verwenden. und dann dasselbe tun, um Daten vom zweiten View-Controller an den dritten zu übergeben. Aber leider funktioniert diese Logik nicht. Ich habe versucht, die Daten von VC1 an die ParentVC dann an die ChildVC übergeben. Ich habe auch versucht, die Daten von VC1 direkt an den ChildVC zu übergeben, aber das scheint auch nicht zu funktionieren. Hier

ist, was ich habe

import UIKit 
class ViewController1: UIViewController { 

var a = "Test" 

override func viewDidLoad() { 
    var pVC = ParentViewController() 
    pVC.a = a 
    } 
} 

Ich bin in der Lage Daten an die Eltern-View-Controller zu übergeben und er druckt Test aber es funktioniert nicht für das Kind-View-Controller

import UIKit 

class ParentViewController: UIViewController { 

var pageMenu: CAPSPageMenu? 
var a = "" 

func test() { 

    var cvC = ChildViewController(frame: self.view.frame) 
    cvC.a = a 
} 

override func viewDidLoad() { 
    println(a) 

} 

override func viewWillAppear(animated: Bool) { 

} 

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

    // MARK: - Scroll menu setup 

    // Initialize view controllers to display and place in array 
    var controllerArray : [UIViewController] = [] 

    var controller1 : ChildViewController = ChildViewController(nibName: nil, bundle: nil) 
    controller1.title = "View Controller" 
    controllerArray.append(controller1) 

    // Initialize scroll menu 
    pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 65, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters) 

    self.view.addSubview(pageMenu!.view) 

    } 
} 

Und in der Kind View Controller Ich habe:

import UIKit 

class ChildViewController: UIViewController { 

var a = "" 

convenience init(frame:CGRect){ 
    self.init(nibName: nil, bundle: nil) 
    self.view.frame = frame 

} 

override func viewDidLoad() { 
    var pVC = ParentViewController() 
    pVC.test() 
    println(a) 
} 
+0

Was ist 'cvC' in Ihrem Code? – Leo

+0

Es soll eine Variable sein. Ich werde es bearbeiten. –

+0

Sie erstellen jedes Mal neue Controller.'ChildViewController' erstellt einen neuen' ParentViewController' wenn die Ansicht geladen wird und 'ParentViewController' erstellt erneut' ChildViewController' in 'test' Methode und' viewDidAppear' erneut, aber Sie übergeben nur die 'a' Eigenschaft in der' test' Methode , das tut nichts mit dem Kindercontroller. – redent84

Antwort

4

Beim Laden der ParentViewController von Ihrem ViewController, sind keine Ansichten in den Speicher geladen. Es ist nur eine Instanz Ihrer ParentViewController Klasse.

Und ich denke, Sie laden oder präsentieren diesen Controller irgendwo anders in Ihrem Code. Wenn ja, ist es sinnvoll, dass Sie die eingestellte Variable erfolgreich drucken.

println (a) -> "Test"

Wenn Sie jedoch Ihre ChildViewController sind Instanziieren Sie einen Rahmen für seine convenience init Bereitstellung und Sie sind der Ansicht Hierarchie tatsächlich initiieren, was wiederum feuert das viewDidLoad Ereignis. Dies wird ausgeführt, bevor die Variable a von ParentViewController -> ViewDidLoad gesetzt wird. Und Ihr Ergebnis beim Drucken der a Variable ist eigentlich eine leere Zeichenfolge.

Eine Möglichkeit besteht darin, Ihre Logik in ihre eigenen Funktionen einzufügen, die Sie explizit aufrufen. Optional mit Ihren Daten als Parameter oder Sie setzen die Variablen vor dem Aufruf der Funktion (en).

Sie sollten einige davon überprüfen, um ein besseres Verständnis dafür zu bekommen, wie die Dinge funktionieren und welche Wege Sie verfolgen können, um das zu erreichen, was Sie wollen.

Instantiate and Present a viewController in Swift

UIViewController class reference

How can I passing data from parent view controller to child view controller?

hoffe, das hilft!

+0

Ich habe versucht, es in eine Funktion zu setzen, die explizit von der Kind-VC aufgerufen wird, aber das hat nicht funktioniert. Ich habe den Code aktualisiert. Irgendwelche Vorschläge? –

+0

Das war nicht genau das, was ich vorhatte. Bitte lassen Sie uns wissen, wenn Sie beim Einrichten dieser Ansichten Storyboard verwenden möchten oder ob sie programmgesteuert erstellt wurden? – Laffen

Verwandte Themen