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

3
我有一个菜单栏应用程序,因此该应用程序从未真正“聚焦”,因此用户可以使用 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)
}

这适用于我的登录界面,但运行时它只是将应用程序的主视图放入自己的窗口中,而不显示“设置”屏幕。

我知道我没有使用WindowGroup,而是使用Settings,因此打开窗口可能需要完全不同的方法,我不知道该怎么做?

3个回答

3

针对 macOS 13.0

if #available(macOS 13.0, *) {
    NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil)
}
else {
    NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil)
}

我遇到了一个错误:“无法在范围内找到'NSApp'”。 - Serhii Didanov
1
尝试:导入AppKit - Jury Shortki

0
 NSApp.sendAction(Selector(("showPreferencesWindow:")), to: nil, from: nil)

0
不要在handlesExternalEvents中包含“macOSApp://”部分。请尝试以下代码:
Settings {
        SettingsView()
            .environmentObject(Authentication())
    }.handlesExternalEvents(matching: Set(arrayLiteral: "SettingsView"))
}

同样的事情,可惜了。 - Nathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接