如何使用UITrogressView和UITextField作为进度值?

时间:2018-03-06 18:23:40

标签: swift uiprogressview

我的目标是创建一个UIProgressView,显示用户输入的进度。我一直在寻找各地的示例,所有这些都使用带有计时器的进度视图。我还希望使用用户默认值保存进度。有没有办法在用户输入值的地方执行此操作?如果是这样,有人能指出我正确的方向吗?

    progressView.progress = (sender as AnyObject).value

2 个答案:

答案 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