我有一个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])
}
感谢您的帮助。
答案 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)
}
}
}
}