当我使用 segue 导航到下一个视图时,我的代码正在工作,它可以在视图之间传递数据,但问题是当我使用下面的代码时。
我用来导航的代码,当我使用下面的代码导航下面的override func prepare(for segue: UIStoryboardSegue, sender: Any?)
时,它不再起作用。使用此导航数据不再传递到下一个视图。使用以下代码
if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController
{
present(vc, animated: true, completion: nil)
}
当使用 segue 将数据传递到下一个视图时,此代码不起作用
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dist = segue.destination as? ScoreViewController {
dist.kid_score = KidScore
print("naka:" , dist.kid_score)
}
}
有没有另一种方法可以将数据传递到下一个视图?
如果你真的想调用prepare(for segue..)
函数,那么为了导航到其他视图,你必须像这样调用它,
self.performSegue(withIdentifier: "Your_Segue_Identifier", sender: Your_data)
如果你执行上面的行,下面的函数将被调用,
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == Your_Identifier {
let destination = segue.destination as! ScoreViewController
destination.item = sender as! Your_Data
}
}
更新
在推送到另一个视图控制器时传递数据的替代方法。
let scoreVC = self.storyboard?.instantiateViewController(withIdentifier: "Identifier") as! ScoreViewController
scoreVC.item = Your_Data
self.navigationController?.pushViewController(scoreVC, animated: true)
希望您能理解答案,如有任何疑问,请告诉我。
如果要导航到具有标识符"ScoreViewController"的故事板上的Controller
,请执行此操作(当您尝试将一个情节提要的视图控制器显示给另一个情节提要视图控制器时,这将适用 -
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "ScoreViewController") as! ScoreViewController
self.present(nextViewController, animated:true, completion:nil)
更新 -用于传递数据 -
您可以使用struct
传递值 - 在像下面这样创建的 swift 文件中创建一个类
class StructOperation {
struct yourGlovalVariable {
static var userName = String();
}
}
将值断言到类中StructOperation
类中struct yourGlovalVariable
变量static var userName
firstViewController
例如-
@IBAction func buttonnSend(_ sender: Any) {
StructOperation.yourGlovalVariable.userName = "Akorn Durn Kurvirck";
//Code Move to Second View Controller(first one- put it here)
}
在您的secondViewController
视图中,控制器获得像波纹管这样的值
var username = StructOperation.yourGlovalVariable.userName;
您可以使用这两种方式在下一个视图上传递数据。 首先,您需要在下一个视图控制器中使用名称kid_score
定义属性。 通过呈现ViewController
您可以使用给定的代码:
if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController
{
vc.kid_score = KidScore
present(vc, animated: true, completion: nil)
}
对于第二种情况,您需要将标识符添加到该segue
并在performSegue(withIdentifier: "YourIdentifier", sender: self)
方法中传递它。您的prepare
代码是正确的。只需检查您是否能够打印KidScore
的值,因为它看起来像一个Type
。