我试图将按钮点击值保存为持久性中的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)
}
答案 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密钥等持久性数据。所以,我认为它也将解决你的要求。