如何将 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") 是因为你可以连接多个 @IBAction
s,例如一个用于事件 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")
我有一个包含两个设置组件的应用程序,一个 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") 是因为你可以连接多个 @IBAction
s,例如一个用于事件 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")