如何在 segues 之间传递值

Posted

技术标签:

【中文标题】如何在 segues 之间传递值【英文标题】:How to Pass values in between segues 【发布时间】:2018-02-10 11:50:38 【问题描述】:

所以我有 2 个视图控制器,我想在它们之间传递值并具有以下代码

@IBAction func analysisButton(_ sender: Any) 
    if expensesRecieved.count > 0
        let categoryAnalysisController = storyboard?.instantiateViewController(withIdentifier: "CategoryVC") as! CategoryAnalysis
        //            var categoryAnalysisController: CategoryAnalysis = CategoryAnalysis(nibName: nil, bundle: nil)
        categoryAnalysisController.collection = collectionDisplayed.text
        self.performSegue(withIdentifier: "categoryAnalysis", sender:(Any).self)
    

我想要做的是,如果费用接收的计数大于 0,则执行 segue 并传递值,如果不是,则发出警报并且不做任何事情。

过去我使用过 prepareSegue 方法,但从未这样做过。我尝试了几种方法,一种是这样的,但都没有奏效。请帮忙!

【问题讨论】:

Passing data between View Controllers using Segue的可能重复 【参考方案1】:

试试这个:

@IBAction func analysisButton(_ sender: Any) 
    if expensesRecieved.count > 0 
        self.performSegue(withIdentifier: "categoryAnalysis", sender: nil)
    


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "categoryAnalysis" 
        guard let viewController = segue.destination as? YourViewController else  return 
        viewController.expensesReceived = self.expencesReceived
     else 
        super.prepare(for: segue, sender: sender)
    

【讨论】:

【参考方案2】:

假设您在目标视图控制器中有一个名为“data_from_last_viewcontroller”的全局变量,您可以覆盖此方法并执行类似的操作,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

 if segue.identifier == "categoryAnalysis" 
 
    if let dist = segue.destination as? YOURNEXTVIEWCONTROLLER
    
         dest.data_from_last_viewcontroller = YOUR_DATA_TO_PASS_HERE  
    
 

这里发生了什么

每次 segue 即将执行时都会调用此方法,在您的情况下,就在 performSegue 行之后。 它获取目标 Viewcontroller 并像这样设置目标 ViewController 的值,以便在新的 viewcontroller 启动时准备好。

【讨论】:

以上是关于如何在 segues 之间传递值的主要内容,如果未能解决你的问题,请参考以下文章

如何在视图控制器之间传递数据而不在 ios 中使用 segue?

如何在不使用 segue 的情况下在视图控制器之间传递图像

如何在 Swift 中的两个场景之间传递数据?

在没有 Segues 的 ViewController 之间传递数据

在没有Segues的故事板之间传递变量 - Swift

iOS Swift 使用 Segue 在 vi​​ewController 之间传递变量