Reputation: 921
I have tried a few variations of using ObservableObject and @Published to try to open a sheet in my ContentView from an update via an outside class, but I can't get it to work.
How can I achieve this with an Observable/Observed object?
import SwiftUI
class SheetObservable: ObservableObject {
@Published var isActive = false
}
struct ContentView: View {
@ObservedObject var Sheet = SheetObservable()
var body: some View {
Button(action:{
Actions().openSheet()
}){
Text("Open Sheet")
}
.sheet(isPresented: self.$Sheet.isActive) {
EmptyView()
}
}
}
class Actions {
@ObservedObject var Sheet = SheetObservable()
public func openSheet() {
print("openSheet fired()")
self.Sheet.isActive = true
}
}
Upvotes: 2
Views: 644
Reputation: 257663
It needs to use same instance of ObjservableObject
, so here is fixed code
struct ContentView: View {
@ObservedObject var Sheet = SheetObservable()
var body: some View {
Button(action:{
Actions(sheet: self.Sheet).openSheet()
}){
Text("Open Sheet")
}
.sheet(isPresented: self.$Sheet.isActive) {
EmptyView()
}
}
}
class Actions {
@ObservedObject var Sheet: SheetObservable
init(sheet: SheetObservable) {
self.Sheet = sheet
}
public func openSheet() {
print("openSheet fired()")
self.Sheet.isActive = true
}
}
Tested with Xcode 11.4 / iOS 13.4
Upvotes: 1