UserDefaults для кнопки - PullRequest
       74

UserDefaults для кнопки

0 голосов
/ 15 апреля 2020

Я новенький здесь. Я пытался исследовать больше информации, но безуспешно, надеюсь, кто-то может помочь мне с этим:

Я создаю приложение, например, флажок в одном ViewController (CLViewController), и то, что я использую, это: кнопки в виде изображения и после нажатия они меняют его отображение на другое изображение. (Отметить / снять отметку - item1a / item1b)

В приложении есть другие контроллеры ViewController, где вы можете иметь различную информацию, но у меня возникает проблема в тот момент, когда я go возвращается к этому CLViewController, когда я При переходе от другого ViewControllers CLViewController возвращается к значению по умолчанию, которое все не проверено. Я намерен оставить кнопки «Проверено» такими, какими они были, когда я их оставил. Я знаю, как использовать 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        
          }

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Сначала в 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)")
}
0 голосов
/ 15 апреля 2020

Большое спасибо за ваш ответ.

Я пронумеровал тег и присвоил 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)
{
    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-0\(tag)")  
}
...