不确定为什么我的按钮状态没有被存储。图像从未填充变为填充,但是当我从视图控制器中单击并返回时,图像被重置为未填充。
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()
}
答案 0 :(得分:0)
您的主要问题是,您似乎没有任何代码会在视图出现时根据布尔值设置按钮图像-您可以从用户默认设置中检索按钮图像,而仅在用户点击按钮时设置图像。
您也可以进行其他一些更改:
sender
的形式接收UIButton
,从而避免向下转换。.toggle()
来切换布尔值synchronize()
。我会将图像设置重构为它自己的函数,并使用didSet
处理程序来调用它,并在值更改时保存布尔值。您还需要从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)
}