我有一个Window控制器和2个View Controllers。当用户点击一个按钮时,我需要打开第二个View Controller。我点击并从一个按钮将一个segue从第一个视图拖到第二个视图。现在当用户单击第二个View Controller打开的按钮
现在我需要传递一些数据 - 从第一个View Controller到第二个的URL数组。似乎我需要覆盖segue的一些功能来实现这个
我在这里尝试了与IOS相关的答案中的以下代码 How do you pass data between view controllers in Swift?
由于OSX的类不同,因此许多类未定义
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "YourSegueName") {
//get a reference to the destination view controller
let destinationVC:ViewControllerClass = segue.destinationViewController as! ViewControllerClass
//set properties on the destination view controller
destinationVC.name = viewName
//etc...
}
}
到目前为止,我知道如何在OSX中覆盖segue准备。我不知道如何识别segue并将所需数据传递给新的ViewController。
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
}
请建议。
答案 0 :(得分:3)
你几乎就在那里,你的代码只需要对MacOS进行一些调整。
您对segue方法的准备将如下所示:
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if (segue.identifier?.rawValue == "YourSegueName") {
//get a reference to the destination view controller
let destinationVC:MyViewController = segue.destinationController as! MyViewController
//set properties on the destination view controller
destinationVC.urls = [] //pass in urls here
}
}
您可以看到MacOS有一些调整,UIStoryboardSegue
- > NSStoryboardSegue
,AnyObject
- > Any
(这应该是Any
现在也在iOS中),您需要rawValue
,identifier
- > destination
destinationController
。
代码中提到的ViewControllerClass
是指您创建子类NSViewController
的类。我创建了一个名为MyViewController
的示例,只是为了向您展示它的外观:
class MyViewController: NSViewController {
var urls:[URL] = [] {
didSet(newValue) {
//do something here
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
在完成所有这些工作的故事板中,您需要做一些事情:
我建议你阅读这方面的教程,例如Ray Wenderlich的MacOS View Controllers Tutorial。
答案 1 :(得分:0)
识别segue:
在故事板中选择您的segue,并在左上角的图像中为其指定一个标识符名称。
现在您可以通过以下方式访问segue标识符:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "goToFilterViewController") {
let destinationVC: YourViewController = segue.destinationViewController as! YourViewController
//set properties on the destination view controller
destinationVC.yourArray = array
...
}
}
你的ViewController应该是这样的:
class YourViewController: UIViewController {
//your array should be a optional in your ViewController
var yourArray: [String]!
...
}