Swift 通过Segue将URL数组传递给另一个视图控制器
我有一个窗口控制器和两个视图控制器。当用户单击一个按钮时,我需要打开第二个视图控制器。我单击并从一个按钮拖动一段从第一个视图到第二个视图。现在,当用户单击按钮时,第二个视图控制器打开 现在我需要将URL的一些数据数组从第一个视图控制器传递到第二个视图控制器。似乎我需要重写segue的一些函数来实现这一点 我在这里尝试了与IOS相关的答案中的以下代码 由于OSX的类不同,许多类是未定义的Swift 通过Segue将URL数组传递给另一个视图控制器,swift,xcode,macos,segue,Swift,Xcode,Macos,Segue,我有一个窗口控制器和两个视图控制器。当用户单击一个按钮时,我需要打开第二个视图控制器。我单击并从一个按钮拖动一段从第一个视图到第二个视图。现在,当用户单击按钮时,第二个视图控制器打开 现在我需要将URL的一些数据数组从第一个视图控制器传递到第二个视图控制器。似乎我需要重写segue的一些函数来实现这一点 我在这里尝试了与IOS相关的答案中的以下代码 由于OSX的类不同,许多类是未定义的 override func prepareForSegue(segue: UIStoryboardSegu
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?) {
}
请提供建议。识别序列:
在故事板中选择你的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]!
...
}
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进行一些调整 您的prepare for segue方法如下所示:
class YourViewController: UIViewController {
//your array should be a optional in your ViewController
var yourArray: [String]!
...
}
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
(现在在iOS中也应该是Any
),您需要标识符的rawValue
,目的地
->destinationController
代码中提到的ViewControllerClass
是指您创建的子类NSViewController
的类。我创建了一个名为MyViewController
的示例,旨在向您展示它的外观:
class MyViewController: NSViewController {
var urls:[URL] = [] {
didSet(newValue) {
//do something here
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
在故事板中,要完成所有这些工作,您需要做以下几件事:
给segue一个标识符,例如“YourSegueName”
给第二个视图控制器一个类标识符,例如MyViewController
我建议你阅读一篇关于这方面的教程,例如Ray Wenderlich的。如果我快速运行谷歌搜索,我会找到几个例子。谢谢。。。但我的问题是指OSX…不是很感谢。。。☺️已更新为与传入URL数组相关。