在图形中,我根据用户从输入窗口中的数据库中绘制了菜单。这些入站菜单需要在菜单监控控制器部分中发送。介于两者之间的SWReveal库。
如何传输此数据?
主要故事板图片:
答案 0 :(得分:0)
由于您使用的是故事板,因此您的第一个视图控制器可以覆盖prepareForSegue
,这正是它的用途。
调用此方法时会传入UIStoryboardSegue
对象,并且它包含对目标视图控制器的引用。
在这里,我们可以设置我们想要传递的值。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "MySegueID" {
if let destination = segue.destinationViewController as? SecondController {
destination.myInformation = self.myInformation
}
}
}
在您的情况下,由于ATA Uni Obs不是Login View Controller的直接子项,因此您首先必须将信息传递给Reveal View Controller并从那里传递给ATA Uni Obs视图控制器。
myInformation
是视图控制器上的一个属性,用于保存从一个视图控制器传递到下一个视图控制器的任何数据。他们显然不必在每个控制器上使用相同的名称。
另一个建议是创建一个数据容器单例:一个在应用程序生命周期内只创建一次的对象,并在应用程序的生命周期内持续存在。
此方法非常适合您的应用中需要在不同类中提供/修改全局应用数据的情况。
这是一篇关于如何实现Singleton的精彩文章 https://medium.com/@chan.henryk/singleton-in-swift-3-4383875a5d4d
第三种并不那么流行的方法是将数据保存在UserDefaults中。请注意,您需要了解可以保存到UserDefaults中的类型。 在这里,您可以阅读有关UserDefaults的更多信息: - http://www.ios-blog.co.uk/tutorials/objective-c/storing-data-with-nsuserdefaults/
这是您在UserDefaults
中设置数据的方法let defaults = UserDefaults.standard
if defaults.string(forKey: "market") == nil{
defaults.set("region", forKey: "market")
要从UserDefaults获取数据,您可以执行以下操作
region = defaults.string(forKey: "market")!
另请查看此问题,更详细地解释如何在多个视图控制器之间传输数据: - How do you share data between view controllers and other objects in Swift?