设置UISwitch的初始状态

时间:2014-09-02 15:01:58

标签: ios swift uiswitch

我在我的应用程序的设置菜单中有一个UISwitch,我在尝试让初始状态“开启”时遇到困难。即使我在属性检查器中将初始状态设置为“on”,它仍然会在第一次打开时将其设置为“off”。

基本上,当应用程序第一次打开时,开关将设置为“关闭”,但如果您更改它,它会保存状态,以便正常工作。

这是我的代码:

    @IBAction func dupOffOnSwitch(sender: AnyObject) {
    if dupSwitch.on == true {
        autoAdjust = true
        println(autoAdjust)
    } else {
        autoAdjust = false
        println(autoAdjust)
    }

override func viewWillAppear(animated: Bool) {
    dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
    println(NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings"))
}

'autoAdjust'在import UIKit下声明为true。

2 个答案:

答案 0 :(得分:2)

为了在您首次启动应用时将NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")设置为true,您可以使用以下代码替换AppDelegate类的application:didFinishLaunchingWithOptions:方法:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

    //If app has never been launched...
    if !NSUserDefaults.standardUserDefaults().boolForKey("isNotFirstLaunch") {
        //Set autoAdjustSettings and isNotFirstLaunch to true
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "autoAdjustSettings")
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isNotFirstLaunch")

        //Sync NSUserDefaults
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    return true
}

当然,您可以在UIViewController子类中执行上一个代码,但AppDelegate应该是这些设置的位置。

完成后,您的UIViewController子类应如下所示:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dupSwitch: UISwitch!

    @IBAction func dupOffOnSwitch(sender: AnyObject) {
        dupSwitch.on = (sender as UISwitch).on //Bool
        NSUserDefaults.standardUserDefaults().setBool(dupSwitch.on, forKey: "autoAdjustSettings")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

除非您有充分的理由,否则我认为您不需要在UIViewController子类中使用viewWillAppear:方法来处理NSUserDefaults语句。 viewDidLoad:应该是适合的地方。

答案 1 :(得分:0)

我通过添加以下内容解决了我的问题:

    dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
    println(NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings"))

    userReturnedAuto = NSUserDefaults.standardUserDefaults().boolForKey("userReturnedAuto")
    if userReturnedAuto == false {
        dupSwitch.on = true
        userReturnedAuto = true
        NSUserDefaults.standardUserDefaults().setBool(userReturnedAuto, forKey: "userReturnedAuto")
        NSUserDefaults.standardUserDefaults().setBool(userReturnedAuto, forKey: "autoAdjustSettings")
    }

可能不是理想的解决方案,但它有效。