在UITableView

时间:2015-10-25 23:49:20

标签: swift uitableview cocoa-touch swift2

我有一个UITableView,它有两个ProtoType单元格,两个单独的TableViewCell子类。在其中一个原型单元中,我有多个开关。用户可以在表格中选择他们想要的项目,并打开与该项目对应的开关。我希望能够存储UISwitch状态,因此如果用户导航并返回,他们将看到他们之前选择的内容。

我正在尝试将UISwitch状态存储在字典中,然后在重新加载表时调用状态。

这是我到目前为止的代码:

 @IBAction func switchState(sender: AnyObject) {

    if mySwitch.on{

        savedItems = NSMutableDictionary(object: mySwitch.on, forKey: "switchKey")

        standardDefaults.setObject("On", forKey: "switchKey")

    }
    else{



        standardDefaults.setObject("Off", forKey: "switchKey")

然后这是在awakeNib部分:

override func awakeFromNib() {
    super.awakeFromNib()

    self.mySwitch.on =  NSUserDefaults.standardUserDefaults().boolForKey("switchKey")

    NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true])

}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要做的是:

拥有与数据源完全相同的字典(或任何其他数据类型)。

并在你的

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

您需要为该行indexPath.row添加该词典,然后对您的单元格进行主题化

请注意,您的词典应该是静态的

答案 1 :(得分:1)

把我的答案放在这里而不是评论,所以我希望能更好地解释一下。您需要使用某种系统来跟上哪个字典项与UISwitch对应。您最好的选择可能是拥有一个字典var uiDictionary = [String : Bool](),其中您的密钥是一个您知道对应于特定交换机的字符串。然后,在cellForRowAtIndexPath:中,您将尝试访问每个字典项,检查它是否是您尝试设置的开关,然后进行设置。不知道你的确切设置,但它看起来像这样......

func cellForRowAtIndexPath() {
    //other stuff here
    //now set your switches

    for (key, value) in uiDictionary {
        switch(key) {
            case "Switch1":
                 if value == true {
                     cell?.switch1.setOn(true, animated: true)
                 } else {
                     cell?.switch1.setOn(false, animated: true)
                 }
            break
            case "Switch2":
                 if value == true {
                     cell?.switch1.setOn(true, animated: true)
                 }  else {
                     cell?.switch1.setOn(false, animated: true)
                 }
        }

     }

}