我的应用包含两个设置组件,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
?
答案 0 :(得分:2)
我建议你以这种方式通过Storyboard连接/添加你的/另一个动作:
这里特别强调的是,一旦用户释放按钮,您应该只存储该值(否则您将冗余地向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")