我的主VC中有一些变量,当用户单击另一个VC中的按钮时,prepareForSegue会将新值传递给主VC并更新标签 .
但是,当用户再次点击它时,它会回到初始值,所以它不会增加,因为该值是在viewDidLoad中设置的?
MainVC:
var statsHealth:Int = 0
override func viewDidLoad() {
super.viewDidLoad()
healthLabel.text = String("Health: \(statsHealth)/10")
}
另一个VC:
override func prepareForSegue(segue:UIStoryboardSegue,sender:AnyObject?){
if (segue.identifier == "startSegue") {
let startVC = segue.destinationViewController as ViewController
startVC.statsHealth += 1
}
它显示为0,然后显示为1,然后再显示0,然后显示1而不是2,3,4等 .
有任何想法吗?
BR
尼尔斯
2 回答
所以根据你的描述,我假设视图控制器结构是这样的:
AnotherVC - > MainVC
MainVC呈现在AnotherVC之上 . 当你回到AnotherVC时,你是否完全解雇了MainVC?如果是这样,那么每次从AnotherVC转到MainVC时,它都会启动一个新的ViewController,之前保存的变量不再存在 .
如果要在MainVC中保留此结构并更改变量,请在AnotherVC中保留mainVC的引用 . 然后,您可能希望以编程方式呈现它,而不是在故事板中连接 .
如果你的mainVC在任何情况下都在AnotherVC之上,你可以恢复参考方向 .
也许不是最“快捷”的方式,但肯定运作良好....
创建一个名为Variables.swift的文件,该文件将保存所有“通用”变量(如果这些变量将存在于每个页面上,我认为没有理由这不是'最好'的方法 - 当然这是最简单的要明白!)
在Variables.swift中,保存所有通用变量
然后,在每个其他页面中,随时访问它们
或设置它们