传递给另一个ViewController时重置变量

时间:2019-06-04 14:56:50

标签: ios swift segue

我的问题是,当我切换到另一个ViewController时,我先前的VC调用的变量被重置,因此之后我无法做我想做的事

@IBAction func BackBtn(_ sender: Any) {
    self.nbrQst = 10
    self.Switch1A = 2
    performSegue(withIdentifier: "Numero", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Numero" {
        let vc = segue.destination as! ViewController
        vc.nbrQt = nbrQst
    }
    if segue.identifier == "Numero" {
        let vcNv = segue.destination as! ViewController
        vcNv.Switch1 = Switch1A
    }
}

以下是我将信息从我的Lvl1文件发送到lvl选择器文件以添加if if的方式来解除对lvl的阻止

@IBAction func BackBtn(_ sender: Any) {
    self.nbrQst = 10
    self.Switch1A = 2
    performSegue(withIdentifier: "Numero", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let vc = segue.destination as! ViewController
    vc.nbrQt = nbrQst
    vc.Switch1 += 2
}

这是第二个将数字发送给第一个的ViewController,我希望第一个记住该数字并在每次按下发送数字的按钮时将它们加起来

1 个答案:

答案 0 :(得分:0)

我们将主VC称为“选择器VC”。

在主VC中重置这些数字的原因是,当您按下“ BackBtn”时,实际上并没有返回主VC,而是在创建一个新的主VC并转到那里(因为您做了{{ 1}}在performSegue(withIdentifier: "Numero", sender: self)函数中,BackBtn总是将您带到新的VC,而不是带回您)。新的主要VC的所有字段均从初始编号开始(我假设它们最初为零)。

您要执行的操作是后退,而不是前进。根据从主VC转到级别VC的方式,您有不同的返回主VC的方法。

如果将所有内容推送到导航控制器上,则可以返回:

performSegue

如果您以模态展示所有内容,则可以返回

self.navigationController?.popToRootViewController(animated: true)

您说过,您想更新主VC中的值,以便可以阻止/取消阻止下一个级别。实现此目标的一种非常标准的方法是通过self.dismiss(animated: true, completion: nil) ,请对此进行Google搜索(“在Swift中进行代理”),并在此按照其教程进行操作。

我强烈建议您在继续开发自己的应用程序之前先进行快速开发的在线课程,因为您可能会做错很多事情,并浪费大量时间尝试从Stack Overflow寻求答案。