【问题标题】:How to pass parameters when performing a segue using performSegueWithIdentifier in Swift [duplicate]如何在Swift中使用performSegueWithIdentifier执行segue时传递参数[重复]
【发布时间】:2016-05-25 17:03:04
【问题描述】:

我正在以编程方式调用 segue,谁能帮助我如何传递参数?

@IBAction func update(sender: AnyObject) {

    self.performSegueWithIdentifier("showUpdate", sender: nil)
}

【问题讨论】:

  • 把参数传到哪里?
  • @luk2302 到目的地转场

标签: ios iphone xcode swift


【解决方案1】:

斯威夫特 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ExampleSegueIdentifier" {
        if let destinationVC = segue.destination as? ExampleSegueVC {
            destinationVC.exampleStringProperty = "Example"
        }
    }
}

斯威夫特 3:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ExampleSegueIdentifier" {
            if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
                destinationVC.exampleStringProperty = "Example"
            }
        }
    }

【讨论】:

  • 我建议简单地使用 let destinationVC = segue.destination as! ExampleSegueVC 而不是 if let 结构与 as?。在这种情况下,如果您忘记将 ExampleSegueVC 类分配给您的视图控制器,您将很快失败。
【解决方案2】:

performSegueWithIdentifier 方法有两个参数,1. segue 标识符,2. 你传递的参数是 AnyObject?

@IBAction func update(sender: AnyObject) {

  self.performSegueWithIdentifier("showUpdate", sender: sender)
}

然后在 prepareForSegue 方法中,检查 segue 标识符并将 sender 参数转换为您之前传入的类型。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showUpdate" {
        guard let object = sender as? ObjectToUpdateType else { return }
        let dvc = segue.destinationViewController as! DestinationViewController
        dvc.objectToInject = object
    }
}

【讨论】:

  • 真的这是我见过的最好的答案。所有其他人都希望您在 viewController 类中为要传递给 segue 的数据设置一个 var 属性,我认为这有点矫枉过正。
【解决方案3】:

为segue做准备可以传递数据。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "showUpdate") {

            if let vc: DestinationVC = segue.destinationViewController as? DestinationVC {
                  vc.variable = variableToPass
            }

        }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2016-02-15
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多