Swift - 在 App Delegate 中访问不同的视图控制器

Swift - Access different View Controllers in App Delegate

app delegate 中,一个只有 2 个屏幕的简单应用程序:

这是 app delegatedidFinishLaunchingWithOptions 的代码,我可以将第一个屏幕引用为 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
    }

如何引用中间屏幕上方、下方和旁边的屏幕?请给我一个解决方案。谢谢!

转到您要引用的每个视图控制器,并在身份检查器中,将一些字符串添加到其 StoryBoard ID。

旁边引用它从新的 ViewController(比如,XViewController)到(比如,YViewController) 这样做:

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

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

重要的是要记住,故事板中所有 "peripheral" 视图控制器的视图控制器对象在执行到它们的 segue 之前实际上并不存在,所以没有办法直接从应用程序委托访问它们。相反,无论源视图控制器是什么,您都需要在创建时将状态推送到每个子视图控制器。 Segues 是执行此操作的合适方法。

您可能希望在 Interface Builder 中为中央视图控制器中的每个转场分配一个唯一的转场标识符。单击 segue,然后在此处输入:

在中央视图控制器中,实现 prepareForSegue(_:sender:),执行如下操作:

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

    }
}