保存按钮单击持久布尔值

时间:2017-03-12 09:04:42

标签: ios checkbox swift3 persistence

我试图将按钮点击值保存为持久性中的true或false。如果是,则显示选中的框图像按钮。如果为false,则显示未选中的图像按钮。最初,显示未经检查的框图像。我能够使这个功能起作用,但是当我切换到另一个选项卡或关闭并打开应用程序时,我很难理解如何使它保持不变。

import UIKit

class CurrentGoalViewController: UIViewController {

    var uncheckedBox = UIImage(named: "checkbox")
    var checkedBox = UIImage(named: "checkedbox")
    var isboxclicked: Bool!

这是单击它时出现的复选框功能。

@IBAction func clickBox(_ sender: UIButton) {

    if isboxclicked == true { //box button has not been clicked
        isboxclicked = false
        sender.setImage(#imageLiteral(resourceName: "checkbox"), for: UIControlState.normal) //sets button image to an unchecked (empty) box
    } else {
        isboxclicked = true //box button has been clicked
        sender.setImage(#imageLiteral(resourceName: "checkedbox"), for:UIControlState.normal) //sets button image to an checked (filled) box
    }
}

我在加载时将框按钮设置为false,因此在看到此屏幕时取消选中框按钮。

override func viewDidLoad() {
    super.viewDidLoad()

    isboxclicked = false
}

您可以使用其他屏幕上的复选框进入此屏幕,该屏幕是动态的桌面视图,其中每个单词都使用它自带的复选框(它是一个守门员应用程序)与其自己的屏幕相邻

基本上,我已经阅读了很多关于持久性的内容,并且我对如何保存按钮的状态感到困惑,这样当您离开屏幕或重新启动应用程序时,它仍然存在。任何帮助将不胜感激,谢谢。

溶液

在点击动作功能

let defaults = UserDefaults.standard
defaults.set(isboxclicked, forKey:"checkboxstatus")

在ViewWillAppear

isboxclicked = defaults.bool(forKey: "checkboxstatus")
if isboxclicked == true {
uncheckBox.setImage(checkedBox, for: .normal)
}

3 个答案:

答案 0 :(得分:0)

单击按钮时保存状态:

let defaults = UserDefaults.standard
defaults.set(true, forKey: "CheckBoxChecked")

在viewDidLoad中加载状态:

let defaults = UserDefaults.standard
let state = defaults.bool(forKey: "CheckBoxChecked")

当没有保存任何值时,最后一个函数返回false

答案 1 :(得分:0)

您不能设置任何属性或变量来保存复选框的状态,因为只有在viewcontroller在内存中时它才可用。

我想建议一个解决方案,直到用户重新安装应用程序为止。使用 UserDefaults 值来保存状态,您可以毫不担心地破解此功能。

此外,如果要为有限数量的UIViewController实例保存,您可以使用外部vaiables的概念。默认情况下,所有vaiables都是外部vaiables

希望这会对你有所帮助,

答案 2 :(得分:0)

NSUserDefault将是我的建议。它是应用程序使用的通常持有API密钥等持久性数据。所以,我认为它也将解决你的要求。

相关问题