我希望用戶只能在某些特定條件下單擊切換。所以我在 .onChange 方法下再次反轉“AutocorrectStatus”的值。但似乎該視圖并未遵循此更改。即使 AutocorrectStatus 的值為 false,它仍然會從關閉變為開啟。我該怎么辦?
class GlobalEnvironment: ObservableObject {
@Published var AutocorrectStatus = false
}
struct SettingView: View {
@EnvironmentObject var env: GlobalEnvironment
HStack() {
Toggle("", isOn: self.$env.AutocorrectStatus)
.labelsHidden()
.onChange(of: self.env.AutocorrectStatus) { _AutocorrectStatus in
self.env.AutocorrectStatus = !self.env.AutocorrectStatus
}
if self.env.AutocorrectStatus {
Text ("ON")
.font(.system(size: 26, weight: .semibold))
.frame(alignment: .topLeading)
} else {
Text ("OFF")
.font(.system(size: 26, weight: .semibold))
.frame(alignment: .topLeading)
}
}
}
uj5u.com熱心網友回復:
有幾種方法可以做到這一點。一種方法是為切換提供一個 Binding,它在更新值之前執行必要的檢查。
var body: some View {
HStack {
Toggle("", isOn: self.provideAutocorrectBinding())
}
}
func provideAutocorrectBinding() -> Binding<Bool> {
return Binding(get: {
return self.env.AutocorrectStatus
}, set: { newValue in
let isConnected = false // Your logic to check the connection
if isConnected {
self.env.AutocorrectStatus = newValue
}
})
}
您也可以在那里觸發警報:
struct ContentView: View {
@EnvironmentObject var env: GlobalEnvironment
@State private var showingAlert = false
var body: some View {
HStack {
Toggle("", isOn: self.provideAutocorrectBinding())
}
.alert("Your message.", isPresented: $showingAlert) {
Button("OK", role: .cancel) { }
}
}
func provideAutocorrectBinding() -> Binding<Bool> {
return Binding(get: {
return self.env.AutocorrectStatus
}, set: { newValue in
let isConnected = false // Your logic to check the connection
if isConnected {
self.env.AutocorrectStatus = newValue
} else {
self.showingAlert.toggle()
}
})
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/371289.html
