使用swift中的userdefaults保存复选框按钮状态

时间:2017-09-26 18:14:55

标签: ios swift checkbox uibutton nsuserdefaults

视图控制器有两个复选框按钮 1.chekcIn 2.checkOut

我在用户默认值中保存了checkIN [复选框按钮]状态,工作正常,但是当我在Nextviewcontroller中使用该userdefaults键时,它总是显示为true而没有运行到false块 这是代码

inHomeview控制器

@IBAction func CheckInButtonClick(_ sender: UIButton) {


        for senderdata in checkINOUT {
            senderdata.setImage( UIImage(named:"uncheck1"), for: .normal)
            print("uncheck is called")

        }


        sender.setImage(UIImage(named:"check1"), for: .normal)
         prefs.set(true, forKey: "check")
    prefs.synchronize()

    }

nextviewcontroller

   override func viewDidLoad() {
        super.viewDidLoad()
{        

 let prefs:UserDefaults = UserDefaults.standard
  if  prefs.bool(forKey: "check") ==true
        {
        print("select")

        } else {

            print("unselect")
        }

 }     
如果取消选择执行else块

复选框选择其执行主块

如何在我错误的地方解决这个问题

2 个答案:

答案 0 :(得分:1)

您未将userDefault值设为false。你只将它设置为true,这就是为什么它总是true。并且顺便说一下,不需要使用synchronize()将代码更改为以下代码:

HomeViewController:

@IBAction func CheckInButtonClick(_ sender: UIButton) {
    for senderdata in checkINOUT {
        senderdata.setImage( UIImage(named:"uncheck1"), for: .normal)
        print("uncheck is called")
    }
    sender.setImage(UIImage(named:"check1"), for: .normal)
    UserDefaults.standard.set(true, forKey: "check")
}

NextViewController:

override func viewDidLoad() {
    super.viewDidLoad()       

    if UserDefaults.standard.bool(forKey: "check") {
        print("select")
    } else {
        print("unselect") {
    }
}

请检查您要将check值设置为false的位置并使用它。

<强>更新
做这个检查:

if UserDefaults.standard.set(true, forKey: "check") {
    // Show data
} else {
    // segue to another viewController
}

答案 1 :(得分:0)

当您设置&#34;检查&#34;值为真一次,它将永远为真,直到你设置&#34;检查&#34;值为false。 我认为你应该添加一些代码来设置&#34;检查&#34;当用户没有选中复选框时,为false。