不知道为什么我的按钮状态没有被存储。图像从未填充变为已填充,但是当我单击 View Controller 并返回时,它被重置为未填充。
var recipeFav = UserDefaults.standard.bool(forKey: "recipeFav")
@IBAction func FavButtonTapped(_ sender: Any) {
if recipeFav {
let image = UIImage(named: "starNonfill")
(sender as AnyObject).setImage(image, for: .normal)
} else {
let image = UIImage(named: "starFilled")
(sender as AnyObject).setImage(image, for: .normal)
}
recipeFav = !recipeFav
UserDefaults.standard.set(recipeFav, forKey: "recipeFav")
UserDefaults.standard.synchronize()
}
最佳答案
您的主要问题是,您似乎没有任何代码可以在 View 出现时根据 bool 值设置按钮图像 - 您从用户默认值中检索它,但只有在用户点击按钮后才设置图像。
您还可以进行一些其他更改:
sender
作为 UIButton
,避免了垂头丧气的需要。 .toggle()
切换 bool 值 synchronize()
. 我会将图像设置重构为自己的函数并使用
didSet
处理程序调用它并在值更改时保存 bool 值。您还需要从 viewDidAppear
获取当前值以确保正确设置初始状态。
var recipeFav = false {
didSet {
UserDefaults.standard.set(recipeFav,forKey:"recipeFav")
self.updateFavouriteButton()
}
}
@IBOutlet weak var favouriteButton: UIButton!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.recipeFav = UserDefaults.standard.bool(forKey:"recipeFav")
}
@IBAction func favButtonTapped(_ sender: UIButton) {
self.recipeFav.toggle()
}
private func updateFavouriteButton() {
let image = self.recipeFav ? UIImage(named: "starNonfill") : UIImage(named: "starFilled")
self.favouriteButton.setImage(image, for: .normal)
}
关于ios - 问题在 NSUserDefaults 中存储 "Favourite"按钮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62314861/