我的大学小项目需要帮助。我有两个 View Controller 。 首先 - DietViewController 第二 - WaterBalanceViewController(使用 SPStorkController)
我需要在我的 DietVC 中填充 CircleProgressView。
当我点击 Drink
->
@IBAction func drinkAction(_ sender: UIButton) {
let controller = WaterBalanceViewController()
let transitionDelegate = SPStorkTransitioningDelegate()
controller.transitioningDelegate = transitionDelegate
controller.modalPresentationStyle = .custom
transitionDelegate.customHeight = 620
transitionDelegate.showIndicator = false
self.present(controller, animated: true, completion: nil)
}
然后打开 SPStorkController - 我的第二个 VC
接下来,当我在第二个 VC 中单击按钮 Drink
时,我必须保存:我刚刚喝了多少。例如调用此变量 justDrunk
。在我的第一个 VC 中,我有 var currentAmountOfWater = Float()
这是将传递给 CircleProgressView 的值。我尝试保存:
@objc func pressButton(_ sender: UIButton){
print("Hello")
self.justDrunk = Float(textField.text!)!
let vc = DietViewController()
vc.currentAmountOfWater += justDrunk
vc.currentAmountOfWater += justDrunk
UserDefaults.standard.set(vc.currentAmountOfWater, forKey: "currentAmountOfWater")
print(UserDefaults.standard.float(forKey: "currentAmountOfWater"))
self.dismiss(animated: true, completion: nil)
}
当我尝试打印时,我发现我的值没有保存。始终打印 justDrunk
的结果。
然后我想在我的第一个 VC 中使用我的 currentAmountOfWater
。
在 viewDidLoad `var valueForWater = currentAmountOfWater/maxAmountOfWater
waterProgress.progressColor = UIColor(red: 0, green: 122/255, blue: 1, alpha: 1)
waterProgress.setProgressWithAnimation(duration: 1, value: valueForWater)
拜托,有人帮助我。如何在 secondVC 中输入数据,将数据传递给 firsVC 并在 CicrleProgressView 中显示所有内容。也许您可以编写一段代码,每 24 小时将 currentAmountOfWater
重置为零。
谢谢!
最佳答案
由于您正在立即从存储中检索值,因此您必须执行UserDefaults.standard.synchronize()
以便您的更改立即
这是您更新后的方法
@objc func pressButton(_ sender: UIButton){
guard let justDrunk = Float(textField.text!) else { return }
self.justDrunk = justDrunk
let vc = DietViewController()
vc.currentAmountOfWater += justDrunk
vc.currentAmountOfWater += justDrunk
UserDefaults.standard.set(vc.currentAmountOfWater, forKey: "currentAmountOfWater")
UserDefaults.standard.synchronize()
print(UserDefaults.standard.float(forKey: "currentAmountOfWater"))
self.dismiss(animated: true, completion: nil)
}
请注意,不要强制解包 Float(String)
,用户可能会输入非数字字符串,这可能会导致您的应用程序崩溃。
我更愿意调用委托(delegate)方法来更新 View Controller ,我已在 another post 中对此进行了简要说明。 , 你也可以看看 sample project
关于swift - 填充 CirleProgressView 并将结果保存到 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56317487/