Swift 通过Segue将URL数组传递给另一个视图控制器

Swift 通过Segue将URL数组传递给另一个视图控制器,swift,xcode,macos,segue,Swift,Xcode,Macos,Segue,我有一个窗口控制器和两个视图控制器。当用户单击一个按钮时,我需要打开第二个视图控制器。我单击并从一个按钮拖动一段从第一个视图到第二个视图。现在,当用户单击按钮时,第二个视图控制器打开 现在我需要将URL的一些数据数组从第一个视图控制器传递到第二个视图控制器。似乎我需要重写segue的一些函数来实现这一点 我在这里尝试了与IOS相关的答案中的以下代码 由于OSX的类不同,许多类是未定义的 override func prepareForSegue(segue: UIStoryboardSegu

我有一个窗口控制器和两个视图控制器。当用户单击一个按钮时,我需要打开第二个视图控制器。我单击并从一个按钮拖动一段从第一个视图到第二个视图。现在,当用户单击按钮时,第二个视图控制器打开

现在我需要将URL的一些数据数组从第一个视图控制器传递到第二个视图控制器。似乎我需要重写segue的一些函数来实现这一点

我在这里尝试了与IOS相关的答案中的以下代码

由于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?) {
}
请提供建议。

识别序列:

在故事板中选择你的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数组相关。