保存按钮点击持久布尔值
Save button click persistent boolean value
我正在尝试将按钮点击值保存为 true 或 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")
在视图中会出现
isboxclicked = defaults.bool(forKey: "checkboxstatus")
if isboxclicked == true {
uncheckBox.setImage(checkedBox, for: .normal)
}
点击按钮时保存状态:
let defaults = UserDefaults.standard
defaults.set(true, forKey: "CheckBoxChecked")
在 viewDidLoad 中加载状态:
let defaults = UserDefaults.standard
let state = defaults.bool(forKey: "CheckBoxChecked")
最后一个函数 returns false
还没有保存任何值。
您不能设置任何 属性 或变量来保存复选框的状态,因为它仅在 viewcontroller 存入内存之前可用。
我想向您推荐一个解决方案,该解决方案将持续到用户重新安装应用程序为止。使用 UserDefaults 值来保存状态,您可以放心地使用此功能。
此外,如果要为有限数量的 UIViewController 实例保存它,您可以使用外部变量的概念。在 swift 中,默认所有变量都是外部变量
希望对你有帮助,
NSUserDefault 是我的建议。它是应用程序使用的一种,通常保存 API 键等持久数据。所以,我想它也能解决你的需求。
我正在尝试将按钮点击值保存为 true 或 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")
在视图中会出现
isboxclicked = defaults.bool(forKey: "checkboxstatus")
if isboxclicked == true {
uncheckBox.setImage(checkedBox, for: .normal)
}
点击按钮时保存状态:
let defaults = UserDefaults.standard
defaults.set(true, forKey: "CheckBoxChecked")
在 viewDidLoad 中加载状态:
let defaults = UserDefaults.standard
let state = defaults.bool(forKey: "CheckBoxChecked")
最后一个函数 returns false
还没有保存任何值。
您不能设置任何 属性 或变量来保存复选框的状态,因为它仅在 viewcontroller 存入内存之前可用。
我想向您推荐一个解决方案,该解决方案将持续到用户重新安装应用程序为止。使用 UserDefaults 值来保存状态,您可以放心地使用此功能。
此外,如果要为有限数量的 UIViewController 实例保存它,您可以使用外部变量的概念。在 swift 中,默认所有变量都是外部变量
希望对你有帮助,
NSUserDefault 是我的建议。它是应用程序使用的一种,通常保存 API 键等持久数据。所以,我想它也能解决你的需求。