[SwiftUI] Do something after toggle value changed
這個用法找好久 @@ 一定要紀錄一下
在 SwiftUI 中的 Toggle 是一個圖形的開關
這個東西 算是只做一半 跟 Button 比的話
因為 Button 可以觸發事件:
Button(action: {動做}) {顯示}
可是:
Toggle(isOn: 綁定變數) {顯示}
這樣變成如果只是撥動 Toggle 的話 是沒辦法直接動做的
其實這問題在 Xcode 11 beta 版就已經有人反應 也有對應方式
不過 因為 BindingObject 被廢棄 換成 ObservableObject
裡面的用法也變了 所以一直找不到到底要怎樣正確去觸發動作
最後找到以下的寫法
可以在撥動 Toggle 的時候 觸發出動作
class toggleClass: ObservableObject {
var obChange = ObservableObjectPublisher()
@ Published var toggleOnOff = false {
willSet {
self.obChange.send()
print("You can do some thing here~~")
}
}
}
struct ContentView: View {
@ObservedObject var toggleState = toggleClass()
Toggle(isOn: $toggleState.toggleOnOff) {
Text("test")
}
}
在 SwiftUI 中的 Toggle 是一個圖形的開關
這個東西 算是只做一半 跟 Button 比的話
因為 Button 可以觸發事件:
Button(action: {動做}) {顯示}
可是:
Toggle(isOn: 綁定變數) {顯示}
這樣變成如果只是撥動 Toggle 的話 是沒辦法直接動做的
其實這問題在 Xcode 11 beta 版就已經有人反應 也有對應方式
不過 因為 BindingObject 被廢棄 換成 ObservableObject
裡面的用法也變了 所以一直找不到到底要怎樣正確去觸發動作
最後找到以下的寫法
可以在撥動 Toggle 的時候 觸發出動作
class toggleClass: ObservableObject {
var obChange = ObservableObjectPublisher()
@ Published var toggleOnOff = false {
willSet {
self.obChange.send()
print("You can do some thing here~~")
}
}
}
struct ContentView: View {
@ObservedObject var toggleState = toggleClass()
Toggle(isOn: $toggleState.toggleOnOff) {
Text("test")
}
}
留言
張貼留言