我的目标是创建一个UIProgressView,显示用户输入的进度。我一直在寻找各地的示例,所有这些都使用带有计时器的进度视图。我还希望使用用户默认值保存进度。有没有办法在用户输入值的地方执行此操作?如果是这样,有人能指出我正确的方向吗?
progressView.progress = (sender as AnyObject).value
答案 0 :(得分:0)
您可以尝试在viewController中添加这样的computedProperty:
var progress: Float? {
set{
guard let value = newValue else {
UserDefaults.standard.removeObject(forKey: "progress")
UserDefaults.standard.synchronize()
progressView.progress = 0
return
}
progressView.progress = value
UserDefaults.standard.set(value, forKey: "progress")
UserDefaults.standard.synchronize()
}
get{
return UserDefaults.standard.float(forKey: "progress") ?? 0.0
}
}
如果要设置保存的进度,可以执行以下操作:
progressView.progress = self.progress
如果要从textField设置它:
self.progress = (Float(textField.text ?? "") ?? 0.0)/100
这样你也可以将它保存在UserDefalts中
答案 1 :(得分:0)
UIProgressView.progress
期望Float值介于0.0和1.0之间。
您必须将UITextField字符串值转换为Float值,如下所示:
let textField = sender as? UITextField
if let value = Float(textField?.text ?? ""), value >= 0 && value <= 1.0 {
progressView.progress = value
}
如果您希望textField中的值介于0到100之间,请改用:
if let value = Int(textField?.text ?? ""), (0...100).contains(value) {
progressView.progress = Float(value / 100)
}
要将value
保存到UserDefaults,请使用:
UserDefaults.standard.removeObject(forKey: "progressValue")
UserDefaults.standard.synchronize()
从UserDefaults中检索:
let value = UserDefaults.standard.float(forKey: "progressValue") ?? 0