更改ViewControllers时如何保持UISwitch状态?

时间:2015-02-17 05:26:31

标签: ios swift state uiswitch

当我从一个视图控制器移动到另一个视图控制器时,第一个控制器上的开关将自行重置并且不保持其状态。 如何在查看其他控制器后返回时保存状态?如何在关闭应用程序后保存其状态。我查看了各种stackOverflow问题和响应以及Apple文档,但似乎没有任何效果。

这是我的具有开关的View Controller的类。

class Days: UIViewController {
    @IBOutlet weak var switchButton: UISwitch!
    var switchState = true
    let switchKey = "switchState"
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    @IBAction func saveSwitchPressed(sender:AnyObject) {
        if self.switchButton.on {
            self.switchState = true
            NSUserDefaults.standardUserDefaults().setBool(self.switchState, forKey: switchKey)
            NSUserDefaults.standardUserDefaults().synchronize()
            println(NSUserDefaults.standardUserDefaults().boolForKey(switchKey))
        } else {
            self.switchState = false
            NSUserDefaults.standardUserDefaults().setBool(self.switchState, forKey: switchKey)
            NSUserDefaults.standardUserDefaults().synchronize()
            println(NSUserDefaults.standardUserDefaults().boolForKey(switchKey))
        }
    }
}

我是Swift的初学者,通常是Xcode。提前感谢您的时间和帮助:)

3 个答案:

答案 0 :(得分:13)

Xcode 8.3•Swift 3.1

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var switchButton: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()
        switchButton.isOn =  UserDefaults.standard.bool(forKey: "switchState")
    }

    @IBAction func saveSwitchPressed(_ sender: UISwitch) {
        UserDefaults.standard.set(sender.isOn, forKey: "switchState")
    }
}

enter image description here

答案 1 :(得分:1)

由于您正在同步开关的开/关状态,您可以viewWillAppear:viewDidAppear:将开关状态设置为NSUserDefaults

中存储的值

的内容
override func viewWillAppear(animated: Bool) {
  self.switchButton.on = NSUserDefaults.standardUserDefaults().boolForKey(switchKey)
}

答案 2 :(得分:0)

代码将UISwitch连接到IBoutlet之后

class ViewController: UIViewController {

    @IBOutlet weak var switchButton: UISwitch!

    @objc func switchStateDidChange(_ sender:UISwitch!)
    {
        if (sender?.isOn == true){
            print("on")
        }
        else {
            print("off")
        }
        UserDefaults.standard.set(sender.isOn, forKey: "switchState")
        UserDefaults.standard.synchronize()
    }

   override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(false)
        switchButton?.isOn =  UserDefaults.standard.bool(forKey: "switchState")
        switchButton?.addTarget(self, action: #selector(switchStateDidChange(_:)), for: .touchUpInside)
    }
}