swiftui - 从 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
}
}
解决方案
它需要使用相同的实例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 测试
推荐阅读
- unity3d - 着色器图正在从 texture2D 中截断第一行像素
- c++ - C++ 中的 Xor 加密,带有警告“使用带二进制位运算符的有符号整数操作数”
- mongodb - MongoDB - UpdateMany 或 Bulk.find.upsert 用于更新插入对象数组
- sapui5 - 无法从登录视图路由到主详细信息 (FlexibleColumnLayout) 视图
- php - 将图像分成两部分并显示图像 PHP
- html - 通过 Outlook 启动服务器
- firebase - 由于“替换 /workspace/.runtimeconfig.json?”而导致 Firebase 函数在 GCP 上的 CICD 失败 错误
- r - 在 R 中保存工作,更改工作目录,我不断收到消息“权限被拒绝”
- python-3.x - Python Selenium如何在列表中从变量中分离数据
- javascript - 如何按顺序运行 fetch 语句?