如何将 UISlider 的当前值保存到 swift 中的 NSUserDefaults?

How can I save the current value of an UISlider to my NSUserDefaults in swift?

我有一个包含两个设置组件的应用程序,一个 uiSlider 和一个 uiSwitch

我知道如何为开关保存选项,这就是我正在做的:

@IBOutlet weak var settingA: UISwitch!

override func viewDidLoad() {

        settingA.on = NSUserDefaults.standardUserDefaults().boolForKey("settingA")
...
}

@IBAction func saveSettingA(sender: AnyObject) {
    print("setting A changed")
    NSUserDefaults.standardUserDefaults().setObject(settingA.on, forKey: "settingA")
    NSUserDefaults.standardUserDefaults().synchronize()
}

现在我想对滑块做同样的事情。我已经为滑块及其旁边的标签创建了一个出口(显示滑块的值):

@IBOutlet weak var sliderLabel: UILabel!
@IBOutlet weak var sliderSlider: UISlider!

而且我还有一种方法可以在用户每次移动滑块时更新标签:

@IBAction func sliderValueChanged(sender: UISlider) {
    var currentValue = Int(sender.value)
    sliderLabel.text = "\(currentValue)"
}

但是每次用户选择新值时如何将其保存到 NSUserDefaults

您应该能够在滑块 ValueChanged 函数内的 saveSettingA 中使用相同的逻辑。只需保存 sender.value 对象而不是 int 值。

我建议你 connect/add your/another 通过 Storyboard 采取这种方式:

这里特别强调的是,您实际上应该只在用户释放按钮后才存储该值(否则您会多余地向 NSUserDefaults 发出存储请求,我相信您不希望这样),因此你可以看到我为事件选择了 Touch Up Outside 而不是 Value Changed。 我这样表述的原因 ("connect/add your/another") 是因为你可以连接多个 @IBActions,例如一个用于事件 Value Changed for when你想观察值的变化并在发生这种情况时做一些事情,就像我演示的那样对用户放开滑块采取行动。

然后,为了存储值,你可以这样做:

@IBAction func valueChangeEnded(slider: UISlider) {
    print("save to user defaults")
    NSUserDefaults.standardUserDefaults().setFloat(slider.value, forKey: "slider_value")
  }

然后像这样读回去:

let sliderValue = NSUserDefaults.standardUserDefaults().floatForKey("slider_value")

swift 4.2

1.In 您的视图将会出现。

fontSlider.setValue(UserDefaults.standard.float(forKey: "slider_value"), animated: false)

2.Take storyBoard 的另一个出口 "editingDidEnd"。在该函数中:

UserDefaults.standard.set(fontSlider.value, forKey: "slider_value")

3.And 终于在您的 ValueChanged Outlet 中了。

UserDefaults.standard.set(fontSlider.value, forKey: "slider_value")