如何在Swift中将UISlider的当前值保存到我的NSUserDefaults?

时间:2016-03-07 17:42:09

标签: ios swift uislider

我的应用包含两个设置组件,uiSlideruiSwitch

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

@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

3 个答案:

答案 0 :(得分:2)

我建议你以这种方式通过Storyboard连接/添加你的/另一个动作:

enter image description here

这里特别强调的是,一旦用户释放按钮,您应该只存储该值(否则您将冗余地向NSUserDefaults发送存储请求,我确定您不需要),因此您我可以看到我为该活动选择了Touch Up Outside而不是Value Changed。 我之所以这样说的话是(“连接/添加您的/另一个”),因为您可以连接多个@IBAction,例如一个用于事件Value Changed的时间你希望观察价值变化,并在发生这种情况时做一些事情,同时我也证明了对用户放开滑块的行为。

然后,为了存储该值,您可以执行以下操作:

@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")

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

迅速4.2

1。将出现在您的视图中。

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

2。从storyBoard处获取另一个插座作为“ editingDidEnd”。在该功能中:

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

3,最后进入您的ValueChanged出口。

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