【问题标题】:How can I save the current value of an UISlider to my NSUserDefaults in swift?如何快速将 UISlider 的当前值保存到我的 NSUserDefaults 中?
【发布时间】:2018-12-03 18:20:12
【问题描述】:

我的应用有两个设置组件,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?

【问题讨论】:

    标签: ios swift uislider


    【解决方案1】:

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

    这里特别强调的是,你真的应该只在用户释放按钮后才存储值(否则你会多余地向NSUserDefaults 发出存储请求,我确定你不想要),因此你可以看到我为活动选择了Touch Up Outside 而不是Value Changed。 我这样表述的原因是 ("connect/add your/another") 是因为您可以连接多个@IBActions,例如一个用于事件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")
    

    【讨论】:

    • 谢谢,它可以正常工作,几乎...现在当我回到应用程序时,我看到半径已正确更新,但标签仍显示默认值,并在用户更新触摸滑块。有没有办法以与滑块本身类似的方式更新标签?
    • 好的,你在哪里设置标签文本?
    • 目前我正在更改名为sliderValueChanged 的方法中的标签,使用此代码:var currentValue = Int(sender.value) sliderLabel.text = "\(currentValue)"(我把它放在我原来的问题中:))
    • “当我回到应用程序时”是什么意思?
    • 当然,你可以在你的viewDidLoad()中做sliderLabel.text = "\(NSUserDefaults.standardUserDefaults().floatForKey("slider_value"))"
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      斯威夫特 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 Outlet 中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多