Jay Nguyen
Jay Nguyen

Reputation: 341

Swift - Access different View Controllers in App Delegate

In app delegate, with a simple app having only 2 screens:

And this is the code for didFinishLaunchingWithOptions in app delegate that I can reference the first screen as viewController[0]:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let navController = self.window?.rootViewController as! UINavigationController
        let courseListController = navController.viewControllers[0] as! CourseListController
        courseListController.managedObjectContext = self.managedObjectContext

        return true
    }

How can I reference the screens at above, below and next to the center sreen? Please suggest me a solution. Thank you!

Upvotes: 0

Views: 538

Answers (2)

Chris Vig
Chris Vig

Reputation: 8792

It's important to keep in mind that the view controller objects for all of the "peripheral" view controllers in your story board won't actually exist until the segue to get to them is executed, so there's no way to get access to them directly from the app delegate. Instead, you need to push state to each child view controller as it's created, from whatever the source view controller is. Segues are the appropriate way to do this.

You will probably want to assign each of the segues from the central view controller a unique segue identifier in Interface Builder. Click on the segue, then enter it here:

enter image description here

In the central view controller, implement prepareForSegue(_:sender:), doing something like the following:

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) {
    switch segue.identifier {

    case "SegueIdentifier1":

        guard let destination = segue.destinationViewController as? ViewController1 else { 
            return 
        }

        // set up your view controller here

    case "SegueIdentifier2":

        guard let destination = segue.destinationViewController as? ViewController2 else {
            return
        }

        // set up your view controller here

    // add additional segues as required

    default:
        break // unknown segue

    }
}

Upvotes: 1

Akshansh Thakur
Akshansh Thakur

Reputation: 5341

Go to each view Controller you want to reference and in the identity inspector, add some string to its StoryBoard ID.

next to reference it from the new ViewController (say, XViewController) to (say, YViewController) do this :

var referencedViewController = self?.storyboard.
instantiateViewControllerWithIdentifier("referenceViewID") as! YViewController

self.presentViewController(referencedViewController,
 animated: true, completion: nil)

Upvotes: 0

Related Questions