我的(未来)应用中有一个设置视图,带有4个UISwitch。我想使用UserDefaults类来记录开关状态。
我创建了一个带有4个属性(键)的结构“SettingsKey”来保存每个开关状态:
struct SettingsKeys {
static let appShowContactsPhoto = "app.showContactsPhoto"
static let appShowAge = "app.showAge"
static let widgetShowContactsPhoto = "widget.showContactsPhoto"
static let widgetShowAge = "widget.showAge"
}
要加载数据,我使用4“UserDefaults.standard.bool(forKey:key)”作为“viewDidLoad”方法中SettingsKeys中的4个属性。
保存数据的最佳方法是什么?我不想在我的视图控制器中创建4个动作(每个切换一个“valueChanged”动作),所以我只创建了一个。但是如何使用righ“SettingsKey”属性映射每个UISwitch?我想要一个通用代码(一条指令?),我不希望我的代码是这样的:
if sender = switch1 then record data with this key
else if sender = switch2 then record data with this key
else if ...
也许使用UIView标签?
感谢。
答案 0 :(得分:2)
您可以尝试这样的事情
@IBAction func changeSettings(_ sender: UISwitch) {
switch sender.tag {
case 1:
// Change for switch1
break
case 2:
// Change for switch2
break
case 3:
// Change for switch3, etc
break
default:
print("Unknown Switch")
return
}
}
您可以设置标记(唯一编号以识别您的视图/切换)。
每个开关的(在上面的示例中,它们分别为1,2 3 )。
答案 1 :(得分:0)
我使用了Wolverine提出的UIView.tag属性:
然后我修改了我的结构:
struct SettingsKeys {
// Application Settings
static let appShowContactsPhoto = "app.showContactsPhoto"
static let appShowAge = "app.showAge"
// Widget Settings
static let widgetShowContactsPhoto = "widget.showContactsPhoto"
static let widgetShowAge = "widget.showAge"
// All settings
static let serialized = [
0: appShowContactsPhoto,
1: appShowAge,
10: widgetShowContactsPhoto,
11: widgetShowAge,
]
}
我的行动:
// Click on a switch button
@IBAction func changeSetting(_ sender: UISwitch) {
UserDefaults.standard.set(sender.isOn, SettingsKeys.serialized[sender.tag]!)
}
一切正常!