如何在 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?