2016-05-21 18 views
0

In app delegate, mit einer einfachen App nur 2 Bildschirme mit:Swift - Zugriff auf verschiedene View-Controller in AppDelegate

  • erste Bildschirm ist eine Tabelle View-Controller eingebettet in Navigation Controller
  • zweiten Bildschirm ist ein View-Controller welches verwendet wird, Elemente auf dem ersten Bildschirm-Tabelle über Protokoll/Delegierten/segue

Und das ist der Code für didFinishLaunchingWithOptions in app delegate hinzufügen, dass ich den ersten Bildschirm alsreferenzieren:

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 
    } 

Wie kann ich die Bildschirme über, unter und neben dem Zentrum sreen verweisen? Bitte schlage mir eine Lösung vor. Vielen Dank!

+0

Warum hat jemand nach unten Abstimmung das? –

Antwort

0

Gehen Sie zu jedem Ansichtscontroller, den Sie referenzieren möchten, und fügen Sie im Identity Inspector eine Zeichenfolge zu seiner StoryBoard-ID hinzu.

nächste aus der neuen Viewcontroller verweisen (etwa XViewController) bis (sagen wir, YViewController) dies tun:

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

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

Es ist wichtig, im Auge zu behalten, dass die View-Controller-Objekte für alle " periphere "View-Controller in Ihrem Storyboard werden nicht wirklich existieren, bis das zu ihnen führende Segment ausgeführt wird. Es gibt also keine Möglichkeit, direkt vom App-Delegierten darauf zuzugreifen. Stattdessen müssen Sie den Status jedes untergeordneten View-Controllers bei der Erstellung des Quell-View-Controllers angeben. Segues sind der geeignete Weg, dies zu tun.

Wahrscheinlich möchten Sie jedem Segment des zentralen Ansichtscontrollers in Interface Builder eine eindeutige Segmentkennung zuweisen. Klicken Sie auf das Segue, dann geben Sie es hier:

enter image description here

Im zentralen View-Controller, implementieren prepareForSegue(_:sender:), etwas zu tun, wie folgt aus:

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 

    } 
} 
+0

Vielen Dank für Ihre Hilfe! aber ich frage nicht nach der 'prepareForSegue' -Funktion, um eine Ansicht nach Bezeichnern anzuzeigen. Ich werde es in den View-Controllern anstatt in "App-Delegaten" machen. Eigentlich arbeite ich an 'CoreData' und ich möchte auf einen bestimmten View-Controler verweisen, dem ich den' managedObjectContext' zuordnen möchte. –

+0

@LKPhucNguyen Ich denke, du solltest 'prepareForSegue' trotzdem verwenden. Der 'segue.destinationViewController als? ViewController1' kann dann das Objekt als Eigenschaft zugewiesen werden –

+0

@ChrisVig kudos für eine gute Antwort –

Verwandte Themen