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

Ios 如何将UISlider的当前值保存到swift中的NSUserDefaults?,ios,swift,uislider,Ios,Swift,Uislider,我有一个带有两个设置组件的应用程序,一个uiSlider和一个uiSwitch 我知道如何为交换机保存选项,这就是我正在做的: @IBOutlet weak var settingA: UISwitch! override func viewDidLoad() { settingA.on = NSUserDefaults.standardUserDefaults().boolForKey("settingA") ... } @IBAction func saveSettin

我有一个带有两个设置组件的应用程序,一个
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()
}
现在我想对滑块做同样的操作。我已经为滑块及其旁边的标签创建了一个出口(显示滑块的值):

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

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

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

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

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

我建议您通过故事板以以下方式连接/添加您的/另一个操作:

这里特别强调的是,您实际上应该只在用户释放按钮后存储值(否则您将冗余地向
NSUserDefaults
(我肯定您不希望这样),因此您可以看到我为事件选择了
Touch out
,而不是
value Changed
。 我这样说的原因(“连接/添加你的/另一个”)是因为你可以连接多个
@iAction
s,例如一个用于事件
值更改
,当你想观察值更改并在发生更改时做一些事情时,以及我演示的在用户松开滑块时进行操作

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

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

我建议您通过故事板以以下方式连接/添加您的/另一个动作:

这里特别强调的是,您实际上应该只在用户释放按钮后存储值(否则您将冗余地向
NSUserDefaults
(我肯定您不希望这样),因此您可以看到我为事件选择了
Touch out
,而不是
value Changed
。 我这样说的原因(“连接/添加你的/另一个”)是因为你可以连接多个
@iAction
s,例如一个用于事件
值更改
,当你想观察值更改并在发生更改时做一些事情时,以及我演示的在用户松开滑块时进行操作

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

@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.将出现在您的视图中

fontSlider.setValue(UserDefaults.standard.float(forKey: "slider_value"), animated: false)
2.从故事板中选择另一个出口作为“editingDidEnd”。在该职能中:

UserDefaults.standard.set(fontSlider.value, forKey: "slider_value")
3.最后是在你的价值观改变的出口

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

1.将出现在您的视图中

fontSlider.setValue(UserDefaults.standard.float(forKey: "slider_value"), animated: false)
2.从故事板中选择另一个出口作为“editingDidEnd”。在该职能中:

UserDefaults.standard.set(fontSlider.value, forKey: "slider_value")
3.最后是在你的价值观改变的出口

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

谢谢,它正常工作,几乎。。。现在,当我回到应用程序时,我看到半径已正确更新,但标签仍显示默认值,并且在用户触摸滑块时更新。有没有一种方法可以像滑块本身一样更新标签?当然,在哪里设置标签文本?目前,我正在使用名为
sliderValueChanged
的方法更改标签,使用以下代码:
var currentValue=Int(sender.value)sliderLabel.text=“\(currentValue)”
(我把它放在我的原始问题中:))你说“当我回到应用程序时”是什么意思?当然,你可以在你的
viewDidLoad()中执行
sliderLabel.text=“\(NSUserDefaults.standardUserDefaults().floatForKey(“slider\u值”)”
谢谢,它可以正常工作,几乎。。。现在,当我回到应用程序时,我看到半径已正确更新,但标签仍显示默认值,并且在用户触摸滑块时更新。有没有一种方法可以像滑块本身一样更新标签?当然,在哪里设置标签文本?目前,我正在使用名为
sliderValueChanged
的方法更改标签,使用以下代码:
var currentValue=Int(sender.value)sliderLabel.text=“\(currentValue)”
(我把它放在我的原始问题中:))你说“当我回到应用程序时”是什么意思?当然,你可以在
viewDidLoad()中执行
sliderLabel.text=“\(NSUserDefaults.standardUserDefaults().floatForKey(“slider\u值”)”