swift - SwiftUI 2:在新窗口中打开视图的方式
问题描述
让我们想象一下我有一个应用程序
var storeVM = BookStoreViewModel(bla1: bla1, bla2: bla2, bla3: bla3)
@SceneBuilder var body: some Scene {
WindowGroup {
BookStoreView( model: storeVM )
}
#if os(macOS)
Settings {
SettingsView(model: config)
}
#endif
}
BookStore 有一个网格,其中有很多书籍保存在一些数据库中。
BookView 可以通过以下方式启动:
BookView(model: bookViewModel)
目标:在新的分离窗口中打开 BookView(例如单击按钮)。我怎样才能做到这一点?
奖励问题:如何SettingsView(model: config)
从代码中打开?
PS:NavigationLink
对我来说不是解决方案,因为我没有使用NavigationView
.
解决方案
我找到了这个答案,它对我来说可以打开一个新窗口:https ://developer.apple.com/forums/thread/651592?answerId=651132022#651132022
我在xcode 12.3
, Swift 5.3
, 运行大苏尔。
以下是如何设置的示例,以便ContentView
可以使用按钮打开OtherView
窗口。
@main
struct testApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
WindowGroup("OtherView") {
OtherView()
}
.handlesExternalEvents(matching: Set(arrayLiteral: "*"))
}
}
struct ContentView: View {
@Environment(\.openURL) var openURL
var body: some View {
Button("Other View") {
if let url = URL(string: "test://otherview") {
openURL(url)
}
}
}
}
struct OtherView: View {
var body: some View {
Text("Other View!")
}
}
注意:确保遵循链接答案中包含的 URL 方案说明(为方便起见,此处引用):
现在在 Project->Info->URL Types
test
中输入 URL Schemes 字段(以及标识符字段)以向系统注册我们的应用程序。
我通过编辑Info.plist
文件并在那里进行添加来实现这一点,即URL types
-> URL Schemes
...:
推荐阅读
- python - 经典“ValueError:一系列的真值不明确”
- r - 在 R 中绘制连续/破碎和离散数据;x 轴上的时间和 y 轴上的 bin
- html - 孤立的 HTML 表单未提交
- python - 使用 python Gspread Oauth 和凭证文件保存在 gspread 文档中指定的目录以外的地方
- python - 绘制中心圆并实现沿圆移动的对象(bitmp)
- r - 使用 system() 在后台运行闪亮的应用程序时出错?
- javascript - 如何从 node.js 重新加载浏览器
- javascript - JavaScript 创建二维数组
- json - 解析来自 Postman 的 JSON 数据
- r - ggplot2:点颜色不会自动更改