как сохранить и получить кнопку включения и отключения значения с помощью Userdefaults - PullRequest
0 голосов
/ 06 июня 2018

Я хочу сохранить кнопку включения и отключения значения в userdefault.Я написал следующий код, но ничего не произошло.Подскажите, пожалуйста, как сохранить и получить значение кнопки включения и отключения.

Я хочу, чтобы при нажатии кнопки ibaction она отключалась, а когда приложение закрывалось и снова открывало приложение, то должно сохранять состояние отключениякнопка.

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var btn2: UIButton!
@IBOutlet weak var btn1: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()

//        let def = UserDefaults.standard.bool(forKey: "val")
//        btn1.isEnabled = def

}

override func viewWillAppear(_ animated: Bool) {

    let def = UserDefaults.standard.bool(forKey: "val")
    print(def)
        //btn1.isEnabled = def

}

@IBAction func btn1Pressed(_ sender: UIButton) {
     let def = UserDefaults.standard.bool(forKey: "val")
    print("Button one pressed")

    let otherAlert = UIAlertController(title: "Button 1!!", message: "Here is button one.", preferredStyle: UIAlertControllerStyle.alert)

    let okaction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (UIAlertAction) in

        print("OK pressed")
        self.btn1.isEnabled = false
         UserDefaults.standard.set(self.btn1.isEnabled, forKey: "val")
    }
    let dismiss = UIAlertAction(title: "No", style: UIAlertActionStyle.cancel) { (UIAlertAction) in
    self.btn1.isEnabled = true
        UserDefaults.standard.set(self.btn1.isEnabled, forKey: "val")

        print("No pressed")

    }
    otherAlert.addAction(dismiss)
    otherAlert.addAction(okaction)

    present(otherAlert, animated: true, completion: nil)
    let def1 = UserDefaults.standard.bool(forKey: "val")
    btn1.isEnabled = def1
}


@IBAction func btn2Pressed(_ sender: UIButton) {

    print("Button Two pressed")
}

}

1 Ответ

0 голосов
/ 06 июня 2018

Вместо сохранения self.btn1.isEnabled сохраните значение, которое вы применяете к этому.Вы не можете сделать это напрямую?

override func viewDidLoad() {
    super.viewDidLoad()
        // You need to check if key is present or else you will get false as default value and your button will disabled only
        if isKeyPresentInUserDefaults(key: "val") {
          let def = UserDefaults.standard.bool(forKey: "val")
          btn1.isEnabled = def
        }
}

// Check key is present or not
func isKeyPresentInUserDefaults(key: String) -> Bool {
   return UserDefaults.standard.object(forKey: key) != nil
}

@IBAction func btn1Pressed(_ sender: UIButton) {

    let defaults = UserDefaults.standard

    defaults.set(false, forKey: "val")
    print("Button one pressed")

    let otherAlert = UIAlertController(title: "Button 1!!", message: "Here is button one.", preferredStyle: UIAlertControllerStyle.alert)

    let okaction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (UIAlertAction) in
        print("OK pressed")
        self.btn1.isEnabled = false
        defaults.set(false, forKey: "val")
    }

    let dismiss = UIAlertAction(title: "No", style: UIAlertActionStyle.cancel) { (UIAlertAction) in
        self.btn1.isEnabled = true
        defaults.set(true, forKey: "val")
        print("No pressed")

    }
    otherAlert.addAction(dismiss)
    otherAlert.addAction(okaction)

    present(otherAlert, animated: true, completion: nil)

    // No need of these 2 lines
    let def1 = defaults.bool(forKey: "val")
    btn1.isEnabled = def1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...