【问题标题】:UserDefaults for a Button按钮的用户默认值
【发布时间】:2020-04-15 07:54:06
【问题描述】:

我在这里是全新的。我一直在尝试研究更多信息但没有成功,希望有人可以帮助我:

我正在一个 ViewController (CLViewController) 中构建一个类似于复选框的应用程序,我使用的是作为图像的按钮,一旦按下它们就会将其显示更改为另一个图像。 (选中/未选中 -- item1a/item1b)

该应用程序有其他 ViewControllers,您可以在其中获得不同的信息,但我遇到的问题是当我从另一个 ViewControllers 移动时回到这个 CLViewController 时,CLViewController 返回到它的默认值这些都是未经检查的。我的目的是让 Checked 按钮保持原样。 我知道如何将 userDefaults 用于文本,但我不知道如何为按钮及其状态编写代码。

import UIKit


class CLviewControllerViewController: UIViewController {

    @IBOutlet weak var btn1: UIButton!
    @IBOutlet weak var btn2: UIButton!
    @IBOutlet weak var btn3: UIButton!




    @IBAction func btn1Action(_ sender: UIButton)
    {
        if sender.isSelected == true
        {
            btn1.setImage(UIImage (named: "item1a"), for: .normal)
            sender.isSelected = false
        }
        else
        {
            btn1.setImage(UIImage (named: "item1b"), for: .normal)
            sender.isSelected = true        
          }

【问题讨论】:

    标签: ios nsuserdefaults userdefaults


    【解决方案1】:

    首先在 viewDidLoad 中,我们将为每个按钮分配一个标签,btn1 将有标签 0,btn2 将有标签 1,btn3 将有标签 2。然后我们可以读取存储在 UserDefaults 中的值并设置适当的状态。请注意,我们会将它们存储为密钥 Item- tag,因此 btn3 将存储为 Item-2。然后在您的@IBAction 中存储状态,以便当您返回此视图控制器时可以检索它。

    @IBOutlet weak var btn1: UIButton!
    @IBOutlet weak var btn2: UIButton!
    @IBOutlet weak var btn3: UIButton!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        for (index, btn) in [btn1, btn2, btn3].enumerated() {
            btn?.tag = index
    
            let selected = UserDefaults.standard.bool(forKey: "Item-\(index)")
            btn?.isSelected = selected
        }
    
    }
    
    @IBAction func btn1Action(_ sender: UIButton)
    {
        if sender.isSelected == true
        {
            btn1.setImage(UIImage (named: "item1a"), for: .normal)
            sender.isSelected = false
        }
        else
        {
            btn1.setImage(UIImage (named: "item1b"), for: .normal)
            sender.isSelected = true
        }
        let tag = sender.tag
        //save state
        UserDefaults.standard.set(sender.isSelected, forKey: "Item-\(tag)")
    }
    

    【讨论】:

    • 如果您还有任何问题,请告诉我:)
    • 非常感谢您的回复。我给标签编号并为 btn1 分配了标签 0 等等……那么,你的意思是这样吗?因为我仍然无法让它工作。 override func viewDidLoad() { super.viewDidLoad() for (index, btn) in [btn1, btn2, btn3].enumerated() { btn?.tag = index let selected = UserDefaults.standard.bool(forKey: "Item- 0(index)") btn?.isSelected = selected } } @IBAction func btn1Action(_ sender: UIButton) { …… } let tag = sender.tag UserDefaults.standard.set(sender.isSelected, forKey: "Item-0 (标签)") }
    • 你还有其他两个按钮的 IBActions 吗?你写的名字没有意义。例如,如果 tag = 3,那么“Item-(tag)”将是一个值为“Item-3”的字符串,因此应该正确保存状态。在 twitter @ladislavklinc 上给我发消息,我可以尝试帮助你。
    • 谢谢,我会通过推特把图片发给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多