gpt4 book ai didi

ios - 问题在 NSUserDefaults 中存储 "Favourite"按钮状态

转载 作者:行者123 更新时间:2023-12-01 16:20:14 27 4
gpt4 key购买 nike

不知道为什么我的按钮状态没有被存储。图像从未填充变为已填充,但是当我单击 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 值设置按钮图像 - 您从用户默认值中检索它,但只有在用户点击按钮后才设置图像。

您还可以进行一些其他更改:

  • 按照惯例,在 Swift 中,函数和属性以小写字母开头——这有助于您将它们与类型区分开来。
  • 您可以将您的操作函数声明为接收 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/

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