设置 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 的初始状态的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCell 重用导致不正确的 UISwitch 状态