设置 UISwitch 的初始状态

Posted

技术标签:

【中文标题】设置 UISwitch 的初始状态【英文标题】:Setting initial state of 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。

【问题讨论】:

【参考方案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 设置为“打开”,因此我只是将其放入其中,如果这样,则在第一次启动应用程序时将其打开,然后再取决于用户拥有的任何内容选择。 好的。所以你的代码很好。如果您想检查另一种编写代码的方式,可以查看我的答案。

以上是关于设置 UISwitch 的初始状态的主要内容,如果未能解决你的问题,请参考以下文章

如何保留 UISwitch 状态

IOS UISwitch 控件

UICollectionViewCell 重用导致不正确的 UISwitch 状态

在 TableViewCell 中保持 UISwitch 的状态:Swift

使用 UISwitch 切换 iOS 7 状态栏

在 UIPopoverController 中设置 UISwitch 状态