prepareForSegue 在 performSegue 之前调用

Posted

技术标签:

【中文标题】prepareForSegue 在 performSegue 之前调用【英文标题】:prepareForSegue called before performSegue 【发布时间】:2017-08-01 17:50:57 【问题描述】:

我正在尝试执行一个 segue,它将许多变量传递给下一个视图,包括一个变量 currentID,它是从解析数据库中检索的。在将 currentID 设置为从数据库下载的 currentID 之前,不应调用 performSegue。但是,当我运行代码时,currentID 在传递到下一个视图时最终是一个空字符串。

这是我的按钮调用的代码:

@IBAction func submitButtonPressed(_ sender: Any) 

    let point = PFGeoPoint(latitude:0.0, longitude:0.0)
    let testObject = PFObject(className: "Person")

    testObject["inputAmount"] = inputAmount
    testObject["outputAmount"] = outputAmount
    testObject["inputCurrency"] = inputCurrency
    testObject["outputCurrency"] = outputCurrency
    testObject["location"] = point

    testObject.saveInBackground  (success, error) -> Void in

        // added test for success 11th July 2016

        if success 
            print("Object has been saved.")

            self.currentID = String(describing: testObject.objectId!)
            if(self.currentID != "")
                self.performSegue(withIdentifier: "mainToListSegue", sender: self)
            

         else 
            if error != nil 
                print (error)
             else 
                print ("Error")
            
        
    

这里是 prepareForSegue 方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    let listViewController = (segue.destination as! UINavigationController).viewControllers[0] as! ListViewController
    listViewController.inputCurrency = inputCurrency
    listViewController.outputCurrency = outputCurrency
    listViewController.inputAmount = inputAmount
    listViewController.outputAmount = outputAmount
    listViewController.currentID = currentID
    listViewController.cellContent = cellContent

【问题讨论】:

问题是什么? 你把你的segue连接到你的按钮了吗? 如何让 currentID 在传递到下一个视图时不为空字符串? 是的,我的 segue 已连接到按钮 那是您的问题...当您需要准备转场时,您必须在视图控制器之间连接转场...黄色圆形图标与情节提要中的另一个...删除您的实际转场并执行它,再命名它,它会工作 【参考方案1】:

为了满足您的需求,您必须在视图控制器之间连接您的 segue,而不是从 UIButton 到视图控制器。

每次你需要在调用它之前准备你的segue,这就是过程:

然后,命名并使用委托方法

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "mySegue" 

    

【讨论】:

【参考方案2】:

要从一个控制器导航到另一个控制器,请从视图控制器而不是按钮连接您的 segue,它会起作用。

【讨论】:

以上是关于prepareForSegue 在 performSegue 之前调用的主要内容,如果未能解决你的问题,请参考以下文章

使用导航控制器在“prepareForSegue”中设置数据

Swift:如何在 UICollectionViewCell 中使用“prepareForSegue”?

在prepareForSegue方法中防止segue?

在 prepareForSegue 中访问 CollectionView indexPath.row

在 UISearchDisplayController 之后 prepareForSegue

如何在 iOS 中的 prepareForSegue 之前执行按钮按下操作?