首页 > 解决方案 > 从 SwiftUI 中的外部类打开 .sheet()

问题描述

我尝试了一些使用 ObservableObject 和 @Published 的变体来尝试通过外部类从更新中打开我的 ContentView 中的工作表,但我无法让它工作。

如何使用 Observable/Observed 对象来实现这一点?

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
    }
}

标签: swiftuiswift5

解决方案


它需要使用相同的实例ObjservableObject,所以这里是固定代码

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
    }
}

使用 Xcode 11.4 / iOS 13.4 测试


推荐阅读