我是Swift和Xcode的新手,但我一直在这里阅读并在YouTube上观看视频,以指导我开始我的应用。一旦应用程序关闭并重新打开,我似乎无法通过按钮来保存其状态。我使用UserDefault To Save Button State作为示例,但是在它之后仍然没有保存按钮状态。
我使用Interface Builder设置状态,到目前为止还有以下代码:
@IBAction func ownedButton(_ sender UIButton) {
sender.isSelected = !sender.isSelected
UserDefaults.standard.set(sender.isSelected, forKey: "isSaved")
UserDefaults.standard.synchronize()
}
单击该按钮将保持选中状态,直到再次单击,因此它部分正常工作。看起来我需要在viewDidLoad部分中使用一些代码,但我无法弄清楚它应该是什么。
感谢您的帮助!
答案 0 :(得分:0)
我的Objective-C时代的习惯是在UserDefaults
中围绕属性编写一个包装器。这样,一切都是编译时检查的,并且字符串作为键的使用被最小化:
// Properties.swift
import Foundation
fileprivate var standardDefaults = UserDefaults.standard
class Properties {
static func registerDefaults() {
standardDefaults.register(defaults: [
kIsButton1Selected: false,
kIsButton2Selected: true
])
}
fileprivate static let kIsButton1Selected = "isButton1Selected"
static var isButton1Selected: Bool {
get { return standardDefaults.value(forKey: kIsButton1Selected) as! Bool }
set { standardDefaults.set(newValue, forKey: kIsButton1Selected) }
}
fileprivate static let kIsButton2Selected = "isButton2Selected"
static var isButton2Selected: Bool {
get { return standardDefaults.value(forKey: kIsButton2Selected) as! Bool }
set { standardDefaults.set(newValue, forKey: kIsButton2Selected) }
}
}
然后在您的View Controller中:
override func viewDidLoad() {
// Always call registerDefaults before you use UserDefaults
// for the first time in your app
Properties.registerDefaults()
button1.isSelected = Properties.isButton1Selected
button2.isSelected = Properties.isButton2Selected
}
@IBAction func ownedButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
switch sender {
case button1:
Properties.isButton1Selected = sender.isSelected
case button2:
Properties.isButton2Selected = sender.isSelected
default:
break
}
}
您可以使用键值观察替换switch
,但请记住在deinit
上删除KVO。