Сохранить состояние UISwitch в UserDefaults - PullRequest
0 голосов
/ 15 мая 2018

Я хотел бы сохранить состояние метки UISwitch с помощью UserDefaults.Мой код выглядит следующим образом:

func viewDidAppear() {
    mySwitch.setOn(userDefaults.standard.bool(forKey: "mySwitchValue"), animated: true)
}

func viewWillDesappear() {
    UserDefaults.standard.set(mySwitch.isOn, forKey: "mySwitchValue")
}

Но в приложении, когда я покидаю представление переключателя и возвращаюсь в него, переключатель UIS не такой, каким я его включил.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Это не ответ на ваш исходный запрос, а ответ на другой запрос в комментарии. Вопрос : Как установить состояние по умолчанию для UISwitch как включенное, если приложение запускается впервые?Хотя в идеале его следует задавать как еще один вопрос, поскольку он является инкрементным, код приведен ниже:

import UIKit

class ViewController: UIViewController {

    let userDefaults = UserDefaults.standard

    var firstTimeAppLaunch: Bool {
        get {
            // Will return false when the key is not set.
            return userDefaults.bool(forKey: "firstTimeAppLaunch")
        }
        set {}
    }

    @IBOutlet weak var mySwitch: UISwitch!

    @IBAction func switchAction(_ sender: UISwitch) {
        userDefaults.set(sender.isOn, forKey: "mySwitchValue")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        if !firstTimeAppLaunch {
            // This will only be trigger first time the application is launched.
            userDefaults.set(true, forKey: "firstTimeAppLaunch")
            userDefaults.set(true, forKey: "mySwitchValue")
        }

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(_ animated: Bool) {
        mySwitch.isOn = userDefaults.bool(forKey: "mySwitchValue")
    }

}

Обратите внимание, что вы можете сделать это в функции AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Could add the above code within this as well. Upto you. 
        return true
    }
0 голосов
/ 15 мая 2018

Вероятно, ранее Рмадди указал на проблему.В этом случае используйте spell thingy.

В противном случае, возможно, что установка значения состояния вашего переключателя при исчезновении вида не является разумным выбором.Как и в случае, когда приложение переходит в фоновый режим, другие процессы выполняются параллельно, и, вероятно, установка по умолчанию не применяется до закрытия приложения.

Я бы обычно устанавливал такие значения при вызове таких функций, т. Е. В действии switch.Как только пользователь изменит состояние переключателя, сохраните его в defaults, таким образом, когда вы получите его, когда viewDidAppear, он будет работать.

import UIKit

class ViewController: UIViewController {

    let userDefaults = UserDefaults.standard

    @IBOutlet weak var mySwitch: UISwitch!

    @IBAction func switchAction(_ sender: UISwitch) {
        userDefaults.set(sender.isOn, forKey: "mySwitchValue")
    }

    override func viewDidAppear(_ animated: Bool) {
        mySwitch.isOn = userDefaults.bool(forKey: "mySwitchValue")
    }
}

Демонстрация ниже:

enter image description here

...