gpt4 book ai didi

swift - 使用 Swift/Xcode 重新打开应用程序时保持按钮状态

转载 作者:搜寻专家 更新时间:2023-11-01 05:33:25 25 4
gpt4 key购买 nike

我是 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 部分添加一些代码,但我一直无法弄清楚它应该是什么。

感谢您的帮助!

最佳答案

我在 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。

关于swift - 使用 Swift/Xcode 重新打开应用程序时保持按钮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48598182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com