繁体   English   中英

如何在按钮单击 macOS SwiftUI 上呈现设置视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM