2016-04-05 8 views
2

Ich kann nicht scheinen, eine spezifische Antwort auf mein direktes Dilemma zu finden.Übergeben von Daten zwischen UIPageViewController Kind Ansichten mit Swift

Ich habe eine UIPageViewController, die programmgesteuert durch 6 Kind UIView Szenen lädt. Sie hosten verschiedene Stufen einer 'Hinzufügen'-Elementfunktionalität. Derzeit ist die PageViewController Klasse fügt jedes Kind Blick in ein Array und instanziiert sie bei Bedarf mit:

storyboard?.instantiateViewControllerWithIdentifier("editViewController") 

Der natürliche Delegat wird Set-up zwischen jedem Kind Szene zu streichen und damit keine „prepareForSegue“ Funktion ausgeführt wird.

Während die Seiten streichen, wird eine neue Szene mit einem anderen Bezeichner instanziiert.

Von meinem Lesen, ich versuche jetzt, einen Delegaten einzurichten, der eine Instanz eines Dictionary nimmt, liest/speichert die Eingabe von jeder Stufe (verschiedene Kind UIPageView Szenen) des Prozesses und aktualisiert das Wörterbuch.

Ich verwende die Methoden "viewWillDissapear" und "viewWillAppear", um die Übergabe der Daten in den Delegaten zu erleichtern.

Leider habe ich Probleme, und aufgrund meiner mangelnden Erfahrung, und nicht viel zu diesem spezifischen Problem, brauche ich Hilfe!

Haupt Frage:

Kann ich Set-up einen Daten Delegat in der UIPageViewController Klasse, dass ‚spricht‘ oder UIViews durch das Kind zugegriffen werden?

OR

Kennt jemand eine gute Lösung meinen Wörterbuch von Kind zu Kind zu Kind weitergeben ????

+0

Ich habe eine ähnliche Frage - ich würde gerne wissen, wie Daten aus dem PageViewController passiert bis zu den Kindern –

+0

Luke, ich habe eine Lösung für ein ähnliches Problem gefunden, das für dich funktionieren könnte - werde als Antwort posten. –

Antwort

1

Sie sollten über den UIPageViewController-Delegaten here schauen.

Sie erhalten diese 2 Methoden, die vor und nach dem Übergang zwischen den Viewcontrollern aufgerufen werden.

- pageViewController:willTransitionToViewControllers: // called before the transition starts 
- pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: // called after the transition is finished 
+0

Diese Methoden sind sehr hilfreich. wir können den vorherigen und nächsten viewController holen und wir können ihre Methoden einfach aufrufen und Daten über diese Methoden weiterleiten nach der Typumwandlung –

5

Anstatt Daten von child-> child zu übergeben, können Sie sie von child-> parent-> child übergeben.

Erstens, wenn Sie jedes Kind in der PageViewController mit Storyboard instanziiert? .instantiateViewControllerWithIdentifier ("editViewController"), einen Verweis auf sie speichern.

So etwas wie

var firstViewController: EditViewController? 
... 
firstViewController = storyboard?.instantiateViewControllerWithIdentifier("editViewController") as EditViewController 

Als nächstes erhalten einen Verweis in jedem Kind Viewcontroller auf den PageViewController mit self.parentViewController.

var myPageViewController: PageViewContrller (or whatever yours is called) 
.... 
myPageViewController = self.parentViewController() as PageViewController (or whatever yours is called) 

Nun, diese beiden Referenzen verwenden, können Sie Funktionen im PageViewController und in den Kindern rufen Daten zu übergeben hin und her.

+0

Luke, hat das für dich geklappt? –

0

Es ist sehr einfach, Daten von PageViewController seine Childs zu senden, ohne irgendwelche segues mit

override func viewDidLoad() { 
    super.viewDidLoad() 
     self.delegate=self 
     self.dataSource=self 
    let childViewController=storyboard?.instantiateViewController(withIdentifier: "some identifier of view") as! ChildViewController 
    if let cid = challengeId{ 
     print("Page Challenge id \(cid)") 
    childViewController.challengeId=cid 
    }