在 app delegate
中,一个简单的应用程序只有 2 个屏幕:
- 第一个屏幕是嵌入在导航 Controller 中的表格 View Controller
- 第二个屏幕是一个 View Controller ,用于通过协议(protocol)/委托(delegate)/segue 将项目添加到第一个屏幕表
这是 app delegate
中 didFinishLaunchingWithOptions
的代码,我可以将第一个屏幕引用为 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中所有“外围” View Controller 的 View Controller 对象在执行访问它们的segue之前实际上并不存在,因此无法访问它们直接来自应用程序委托(delegate)。相反,您需要在创建每个 subview Controller 时将状态推送到每个 subview Controller ,无论源 View Controller 是什么。 Segues 是执行此操作的适当方法。
您可能希望在 Interface Builder 中为中央 View Controller 中的每个 Segue 分配一个唯一的 Segue 标识符。单击segue,然后在此处输入:
在中央 View Controller 中,实现 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
}
}
关于Swift - 在应用程序委托(delegate)中访问不同的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364881/