[英]How to present Settings view on button click macOS SwiftUI
我有这个应用程序,它是一个菜单栏应用程序,因此该应用程序永远不会真正“聚焦”,因此用户可以使用CMD +,
快捷方式打开应用程序的设置并不是很明显,因此我想添加一个按钮选项,以便他们也可以通过菜单栏打开设置:
@main
struct macOSApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
MenuView()
.environmentObject(Authentication())
}
WindowGroup("LoginView") {
LoginView()
.environmentObject(Authentication())
}.handlesExternalEvents(matching: Set(arrayLiteral: "macOSApp://LoginView"))
Settings {
SettingsView()
.environmentObject(Authentication())
}.handlesExternalEvents(matching: Set(arrayLiteral: "macOSApp://SettingsView"))
}
}
我有:
Settings {
SettingsView()
.environmentObject(Authentication())
}.handlesExternalEvents(matching: Set(arrayLiteral: "macOSApp://SettingsView"))
}
对于我的设置页面,如果用户通过CMD +,
快捷方式打开它,它会完美运行,我已经添加了一个.handlesExternalEvents(matching: Set(arrayLiteral: "macOSApp://SettingsView"))
修饰符,所以在按钮上点击我可以运行:
if let url = URL(string: "UpSend://SettingsView") {
openURL(url)
}
这适用于我的登录屏幕,但是当它运行时,它只是获取应用程序的主视图并将其放入自己的 window 中,而不显示Settings
屏幕。
我很感激我没有使用WindowGroup
我正在使用Settings
所以打开 window 可能需要完全不同的东西,我只是不知道是什么?
不要在handlesExternalEvents 中包含“macOSApp://”部分。 尝试这个:
Settings {
SettingsView()
.environmentObject(Authentication())
}.handlesExternalEvents(matching: Set(arrayLiteral: "SettingsView"))
}
NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.