2016-04-15 11 views
0

Hier ist der Code, den ich habe. Ich habe ein paar verschiedene Ansätze ausprobiert und einige von ihnen gibt mir den Fehler, dass die Ansicht nicht in der Hierarchie ist.Ich habe mehrere Storyboards. Wie kann ich mit AppDelegate einen anderen ViewController in einem anderen Storyboard öffnen? (Segue)

Der Code-Schnipsel geht unten in der richtigen sonst aber können die Segue oder presentViewController nicht durchführen

func applicationDidTimout(notification: NSNotification) { 
    if let vc = self.window?.rootViewController as? UINavigationController { 
     if let myTableViewController = vc.visibleViewController as? AccountsOverviewViewController { 
      // Call a function defined in your view controller. 
      myTableViewController.signOffUser() 
     } else { 
      // We are not on the main view controller. Here, you could segue to the desired class. 
      let storyboard = UIStoryboard(name: "Accounts", bundle: nil) 
      let vc = storyboard.instantiateViewControllerWithIdentifier("AccountsNavigationController") as UIViewController 
      let vc2 = getVisibleViewController(nil) 
      vc2?.presentViewController(vc, animated: true, completion: nil) 

     } 
    } 
} 

func getVisibleViewController(var rootViewController: UIViewController?) -> UIViewController? { 

    if rootViewController == nil { 
     rootViewController = UIApplication.sharedApplication().keyWindow?.rootViewController 
    } 

    if rootViewController?.presentedViewController == nil { 
     return rootViewController 
    } 

    if let presented = rootViewController?.presentedViewController { 
     if presented.isKindOfClass(UINavigationController) { 
      let navigationController = presented as! UINavigationController 
      return navigationController.viewControllers.last! 
     } 

     if presented.isKindOfClass(UITabBarController) { 
      let tabBarController = presented as! UITabBarController 
      return tabBarController.selectedViewController! 
     } 

     return getVisibleViewController(presented) 
    } 
    return nil 
} 
+0

Storyboard-Referenzen, sie sind Objekte auf der rechten Seite wie UILabel und Sie können segues verbinden oder sie von Code –

Antwort

1

unter der Func Verwenden Sie den sichtbaren View-Controller zu erhalten,

func getVisibleVC() -> UIViewController? { 
    if var visibleVC = window?.rootViewController { 
    while let presentedVC = visibleVC.presentedViewController { 
     visibleVC = presentedVC 
    } 
    return visibleVC 
    } 
    return nil 
} 
+0

Nur eine for-the-record nennen: diese nicht in OSX funktioniert und Sie dies eine ivar mit manuell verdrahten haben. –

+0

Danke das Problem war, dass ich meine VisibleVC nicht bekommen konnte –

Verwandte Themen