为什么当控制器出现时我的 Switch 总是关闭?
Why is my Switch always off when the controller is presented?
我用 Eureka 创建了一个 SwitchRow,但我的开关无法保存当前状态。当模态显示 SettingsView 时,它始终显示为关闭。这有点令人恼火,因为我将行值保存到 UserDefaults 并且您无法判断它是否打开。这是我的代码:
class SettingsView : FormViewController{
override func viewDidLoad() {
super.viewDidLoad()
+++ Section("Messages")
<<< SwitchRow("message_people_withId") { row in
row.title = "Activate messages"
}.onChange { row in
row.title = (row.value ?? false) ? "Deactivate messages" : "Activate messages"
row.updateCell()
UserDefaults.standard.set(row.value ?? false, forKey: "MessageSettingsRow")
}
这将创建一个开关,如果用户将其关闭或打开,它会更改标题。但是 ui 的变化没有反映出来。我认为最好的方法是检查开关行本身并根据行值更改其值:
if row.value == true {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = true
} else {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = false
}
但这并没有改变什么。
有什么建议吗?提前致谢。
您需要定义 row.value
因此使您的代码类似于;
class SettingsView : FormViewController{
override func viewDidLoad() {
super.viewDidLoad()
+++ Section("Messages")
<<< SwitchRow("message_people_withId") { row in
row.title = "Activate messages"
row.value = UserDefaults.standard.bool(forKey: "MessageSettingsRow")
}.onChange { row in
row.title = (row.value ?? false) ? "Deactivate messages" : "Activate messages"
row.updateCell()
UserDefaults.standard.set(row.value ?? false, forKey: "MessageSettingsRow")
}
这将确保 viewDidLoad()
上的值正确。
您的第二个代码块,评估 row.value
为真与否的代码块将始终 return 假,因为 SwitchRow
的标准状态为假。
为简单起见,您的行值未得到更新
print(row.value)
你每次都是真的所以你的开关总是开着
if row.value == true {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = true
} else {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = false
}
我用 Eureka 创建了一个 SwitchRow,但我的开关无法保存当前状态。当模态显示 SettingsView 时,它始终显示为关闭。这有点令人恼火,因为我将行值保存到 UserDefaults 并且您无法判断它是否打开。这是我的代码:
class SettingsView : FormViewController{
override func viewDidLoad() {
super.viewDidLoad()
+++ Section("Messages")
<<< SwitchRow("message_people_withId") { row in
row.title = "Activate messages"
}.onChange { row in
row.title = (row.value ?? false) ? "Deactivate messages" : "Activate messages"
row.updateCell()
UserDefaults.standard.set(row.value ?? false, forKey: "MessageSettingsRow")
}
这将创建一个开关,如果用户将其关闭或打开,它会更改标题。但是 ui 的变化没有反映出来。我认为最好的方法是检查开关行本身并根据行值更改其值:
if row.value == true {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = true
} else {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = false
}
但这并没有改变什么。
有什么建议吗?提前致谢。
您需要定义 row.value
因此使您的代码类似于;
class SettingsView : FormViewController{
override func viewDidLoad() {
super.viewDidLoad()
+++ Section("Messages")
<<< SwitchRow("message_people_withId") { row in
row.title = "Activate messages"
row.value = UserDefaults.standard.bool(forKey: "MessageSettingsRow")
}.onChange { row in
row.title = (row.value ?? false) ? "Deactivate messages" : "Activate messages"
row.updateCell()
UserDefaults.standard.set(row.value ?? false, forKey: "MessageSettingsRow")
}
这将确保 viewDidLoad()
上的值正确。
您的第二个代码块,评估 row.value
为真与否的代码块将始终 return 假,因为 SwitchRow
的标准状态为假。
为简单起见,您的行值未得到更新
print(row.value)
你每次都是真的所以你的开关总是开着
if row.value == true {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = true
} else {
(self.form.rowBy(tag: "message_people_withId") as? SwitchRow)?.cell.switchControl.isOn = false
}