【问题标题】:Setting initial state of UISwitch设置 UISwitch 的初始状态
【发布时间】:2014-09-02 15:01:57
【问题描述】:

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

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

这是我的代码:

    @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。

【问题讨论】:

    标签: ios swift uiswitch


    【解决方案1】:

    为了在您首次启动应用时将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 子类中为你的 NSUserDefaults 语句使用viewWillAppear: 方法。 viewDidLoad: 应该是合适的地方。

    【讨论】:

      【解决方案2】:

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

          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")
          }
      

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

      【讨论】:

      • userReturnedAuto 的目的是什么?首次启动应用程序时初始化NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
      • @POB 是的。由于我最初无法将 UISwitch 设置为“打开”,因此我只是将其放入其中,如果这样,则在第一次启动应用程序时将其打开,然后再取决于用户拥有的任何内容选择。
      • 好的。所以你的代码很好。如果您想检查另一种编写代码的方式,可以查看我的答案。
      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2021-03-10
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      相关资源
      最近更新 更多