Reputation: 51
I cant seem to find a specific answer to my direct dilemma.
I have a UIPageViewController
that programmatically loads through 6 child UIView
scenes. They host various stages of an 'add' element functionality. Currently the PageViewController
Class adds each child view into an array and instantiates them when required with:
storyboard?.instantiateViewControllerWithIdentifier("editViewController")
The natural delegate is set-up to swipe between each child scene and therefore no "prepareForSegue
" function is run.
As the pages swipe, a new scene with different identifier is instantiated.
From my reading, I am now attempting to set-up a delegate that takes an instance of a Dictionary, that reads/stores input from each stage (different child UIPageView
scenes) of the process and updates the Dictionary.
I am using the "viewWillDissapear
" and "viewWillAppear
" methods to help set-up the passing data into the delegate.
Unfortunately I am running into problems, and due to my lack of experience, and not much on this specific problem, I'm needing help!
Main question:
Can I set-up a data delegate in the UIPageViewController
class, that 'talks' or can be accessed by the child UIViews
?
OR
Does anyone know of a good solution to pass my Dictionary from child to child to child????
Upvotes: 5
Views: 6127
Reputation: 1840
It is very easy to send data from PageViewController to its childs without using any segues
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
}
Upvotes: -1
Reputation: 885
Instead of passing data from child->child, you could pass it from child->parent->child.
First, when you instantiate each child in the PageViewController with storyboard?.instantiateViewControllerWithIdentifier("editViewController"), save a reference to it.
So something like
var firstViewController: EditViewController?
...
firstViewController = storyboard?.instantiateViewControllerWithIdentifier("editViewController") as EditViewController
Next, get a reference in each child ViewController to the PageViewController using self.parentViewController.
var myPageViewController: PageViewContrller (or whatever yours is called)
....
myPageViewController = self.parentViewController() as PageViewController (or whatever yours is called)
Now, using those two references, you can call functions in the PageViewController and in the children to pass data back and forth.
Upvotes: 7
Reputation: 6669
You should look over the UIPageViewController delegate here.
You get these 2 methods that gets called before and after the transition between the viewcontrollers.
- pageViewController:willTransitionToViewControllers: // called before the transition starts
- pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: // called after the transition is finished
Upvotes: 2