通过Segue将URL数组传递给另一个View Controller

时间:2017-09-22 09:22:34

标签: swift xcode macos segue

我有一个Window控制器和2个View Controllers。当用户点击一个按钮时,我需要打开第二个View Controller。我点击并从一个按钮将一个segue从第一个视图拖到第二个视图。现在当用户单击第二个View Controller打开的按钮

enter image description here

现在我需要传递一些数据 - 从第一个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?) {
}

请建议。

2 个答案:

答案 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 - > NSStoryboardSegueAnyObject - > Any(这应该是Any现在也在iOS中),您需要rawValueidentifier - > destination destinationController

代码中提到的ViewControllerClass是指您创建子类NSViewController的类。我创建了一个名为MyViewController的示例,只是为了向您展示它的外观:

class MyViewController: NSViewController {
  var urls:[URL] = [] {
    didSet(newValue) {
      //do something here
    }
  }
  override func viewDidLoad() {
        super.viewDidLoad()
  }
}

在完成所有这些工作的故事板中,您需要做一些事情:

  1. 给segue一个标识符,例如。 " YourSegueName"
  2. 为第二个视图控制器提供类标识符,例如。 MyViewController
  3. 我建议你阅读这方面的教程,例如Ray Wenderlich的MacOS View Controllers Tutorial

答案 1 :(得分:0)

识别segue:

enter image description here

在故事板中选择您的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]!

    ...
}