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 中访问 CollectionView indexPath.row