gpt4 book ai didi

ios - Swift - 将 UserDefaults 添加到 NotificationCenter

转载 作者:行者123 更新时间:2023-11-28 20:49:28 25 4
gpt4 key购买 nike

每当您点击特定的 TableViewCell 以在另一个 ViewController 中执行该通知时,我都实现了一个 NotificationCenter,对于此示例,另一个 ViewController 背景颜色变成粉红色,效果很好,但我的问题是如何使用 UserDefaults 保存粉红色在 ViewController 内部的状态?

为了更好地阐明这一点:

  • ViewController #2 包含按下时执行操作的 TableViewCell

  • ViewController #1 是颜色变为粉色的 View 。

我想要实现什么?

使用 UserDefaultsViewController #1 中保存粉红色的状态

ViewController #1 代码

- viewDidLoad

override func viewDidLoad()
{
NotificationCenter.default.addObserver(self, selector: #selector(BrandTableViewController.testNotifcation(notification:)), name:NSNotification.Name(rawValue: "refresh"), object: nil);
}

- 测试通知函数

@objc func testNotifcation(notification: NSNotification) { 

table.backgroundColor = UIColor.systemPink

print("This is a message to say it is working")
}

ViewController #2 代码

didSelectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

if indexPath.row == 0
{

if traitCollection.userInterfaceStyle == .light
{
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refresh"), object: nil, userInfo: nil)
self.dismiss(animated: true, completion: nil)
}
else if traitCollection.userInterfaceStyle == .dark
{
...
}
}
}

最佳答案

您可以在调用通知方法时在 UserDefaults 中设置颜色。因此,在 ViewController1 中更新您的代码:

@objc func testNotifcation(notification: NSNotification) { 

table.backgroundColor = UIColor.systemPink

let colorData = NSKeyedArchiver.archivedData(withRootObject: UIColor.systemPink)
UserDefaults.standard.set(colorData, forKey: "savedColor")
UserDefaults.standard.synchronize()

print("This is a message to say it is working")
}

然后,在加载 View 时,您需要添加代码来获取保存的颜色并将其设置为背景。因此,更新 ViewController1 中的 viewDidLoad 中的代码。

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(BrandTableViewController.testNotifcation(notification:)), name:NSNotification.Name(rawValue: "refresh"), object: nil);

if let colorData = UserDefaults.standard.value(forKey: "savedColor") as? Data,
let savedColor = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
{
table.backgroundColor = savedColor
}
}

希望对您有所帮助。

关于ios - Swift - 将 UserDefaults 添加到 NotificationCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59332918/

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