1

我创建了一个自定义表格视图单元格。在我的应用程序中,有两个文件。我有一个用于自定义表格视图单元格的单独文件。然后我有一个表格作为一个整体的 tableviewcontroller 文件。

在我的自定义表格视图单元格上,有一个 UISwitch。此 UISwitch 的初始值为 off。在自定义表格视图单元格的文件中,我为开关创建了一个函数。我还为交换机创建了一个插座。

@IBOutlet var theSwitch: UISwitch!

@IBAction func mySwitch(_ sender: AnyObject) {
}

在我的表视图控制器中,我已经创建了视图确实出现的功能。我假设我需要做的是将开关的值保存在

@IBAction func mySwitch(_ sender: AnyObject) {
}

然后在表视图控制器中,以某种方式调用它在这个视图中确实出现了函数。

override func viewDidAppear(_ animated: Bool) {
}

我遇到的问题是保存开关的值,如果它被改变。例如,如果用户打开应用程序并打开开关,我希望应用程序保存它,这样当应用程序重新打开时,开关的值仍然是打开的。希望这可以通过使用用户默认值来完成。如果有人可以向我展示执行此操作的代码,那就太好了。

4

4 回答 4

5

在您的IBAction方法中,您可以像这样保存值

@IBAction func mySwitch(_ sender: UISwitch) {

    UserDefaults.standard.set(sender.isOn, forKey: "Switch")

}

在您的表视图委托方法中以这种方式编写以从用户默认值中获取值并根据您之前的值设置您切换的状态

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let yourCell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! MenuProfileTableViewCell

    yourCell.yourSwitch.setOn(UserDefaults.standard.bool(forKey: "Switch"), animated: true)
}
于 2016-12-19T06:40:12.267 回答
4

您可以像这样在 swift 3 中使用 setBoolForkey

UserDefaults.standard.set(true, forKey: "onoroff")

你想保存的地方,你可以检查viewdidload()中的值,根据“onoroff”的值来改变开关的状态

 theSwitch.setOn(UserDefaults.standard.bool(forKey: "onoroff"), animated: false)
于 2016-12-19T06:43:13.223 回答
2

正如 PiyushRathi 所说,您可以使用 NSNumber 来完成,但您也可以通过设置为 Bool 来完成:

斯威夫特 2.3

//  saving switch value
 NSUserDefaults.standardUserDefaults().setBool(theSwitch.on, forKey: "SwitchValue")

//  getting back the value
theSwitch.setOn(NSUserDefaults.standardUserDefaults().boolForKey("SwitchValue"), animated: true)

对于 Swift 3(正如 EmilioPelaez 建议的那样):

//  saving switch value
UserDefaults.standard.set(theSwitch.isOn, forKey: "SwitchValue")

//  getting back the value
theSwitch.setOn(UserDefaults.standard.bool(forKey: "SwitchValue"), animated: true)

另外,如果你有很多 UI 组件需要保存而不是 switch,你也应该看看这个UIViewController 的“状态保存指南”。

于 2016-12-19T06:41:49.107 回答
2

您可以像这样检查值:

斯威夫特 2

  let userDefaults = NSUserDefaults.standardUserDefaults()
  if userDefaults.valueForKey("SwitchValue") != nil{

        let object = userDefaults.valueForKey("SwitchValue") as? NSNumber
        yourSwitch.on = (object?.boolValue)!
    }

并将值保存到 userDefaults:

userDefault.setValue(NSNumber(bool: yourSwitch.value), forKey:"SwitchValue")

斯威夫特 3

let uDefault = UserDefaults.standard

if uDefault.value(forKey: "SwitchValue") != nil{
     let object = uDefault .value(forKey: "SwitchValue") as? NSNumber
     yourSwitch.isOn = (object?.boolValue)!
}

和设定值

uDefault.set(NSNumber(bool: yourSwitch.value), forKey: "SwitchValue")

希望这可以帮助

于 2016-12-19T06:37:15.377 回答