在app delegate
中,只有2个屏幕的简单应用程序:
这是didFinishLaunchingWithOptions
中app delegate
的代码,我可以将第一个屏幕引用为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
}
如何参考中心屏幕上方,下方和旁边的屏幕?请建议我一个解决方案。谢谢!
答案 0 :(得分:1)
重要的是要记住,故事板中所有“外围”视图控制器的视图控制器对象实际上不会存在,直到执行它们的segue,因此无法访问他们直接来自app delegate。相反,您需要将状态推送到每个子视图控制器,无论源视图控制器是什么。 Segues是执行此操作的合适方式。
您可能希望在中央视图控制器中为Interface Builder中的每个segue分配一个唯一的segue标识符。单击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
}
}
答案 1 :(得分:0)
转到要引用的每个视图控制器,并在身份检查器中,向其StoryBoard ID添加一些字符串。
接下来将它从新的ViewController(比方说,XViewController)引用到(例如,YViewController) 这样做:
var referencedViewController = self?.storyboard.
instantiateViewControllerWithIdentifier("referenceViewID") as! YViewController
self.presentViewController(referencedViewController,
animated: true, completion: nil)