我的主VC中有一些变量,当用户单击另一个VC中的按钮时,prepareForSegue会将新值传递给主VC并更新标签。
但是,当用户再次点击它时,它会回到初始值,所以它没有增加,因为在viewDidLoad中设置了值?
MainVC:
var statsHealth:Int = 0
override func viewDidLoad() {
super.viewDidLoad()
healthLabel.text = String("Health: \(statsHealth)/10")
}
另一个VC:
覆盖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
尼尔斯
答案 0 :(得分:1)
因此,根据您的描述,我假设视图控制器结构是这样的:
AnotherVC - > MainVC
MainVC呈现在AnotherVC之上。当你回到AnotherVC时,你是否完全解雇了MainVC?如果是这样,那么每次从AnotherVC转到MainVC时,它都会启动一个新的ViewController,之前保存的变量不再存在。
如果要在MainVC中保留此结构并更改变量,请在AnotherVC中保留mainVC的引用。然后,您可能希望以编程方式呈现它,而不是在故事板中连接。
class AnotherVC {
var mainVC: MainVC?
func presentMainVC() {
var targetVC = UIViewController()
if self.mainVC != nil {
targetVC = self.mainVC
} else {
let storyboard = UIStoryboard(name: "Your-storyboard-name", bundle: nil)
targetVC: MainVC = storyboard.instantiateViewControllerWithIdentifier("The-main-VC-identifier") as MainVC
self.mainVC = targetVC
}
//you can change your variable here
mainVC.statsHealth += 1
self.presentViewController(self.mainVC, animated: true, completion: nil)
}
如果你的mainVC在任何情况下都在AnotherVC之上,你可以恢复参考方向。
答案 1 :(得分:1)
也许不是最快的'斯威夫特'这样做的方式,但肯定运作良好....
创建一个名为Variables.swift的文件,该文件将保存您所有的' universal'变量(如果这些变量将出现在每一页上,我认为没有理由这不是最好的方法 - 当然这是最容易理解的!)
在Variables.swift中,保存所有通用变量
struct Variables {
static var statsHealth = 0
.....
}
然后,在每个其他页面中,随时访问它们
healthLabel.text = String("Health: \(Variables.statsHealth)/10")
或设置它们
Variables.statsHealth += 1