SwiftUI如何在 macOS 应用中更改主菜单

21 min read

在 SwiftUI 中更改 macOS 应用的主菜单需要两个步骤:

  1. 创建一个新的菜单

可以通过创建一个 NSMenu 对象来创建一个新的菜单。可以在 init() 方法中创建菜单,然后添加所需的菜单项。

class MyMenu: NSMenu {
    init() {
        super.init(title: "My Menu")
        addItem(withTitle: "Item 1", action: #selector(item1Clicked), keyEquivalent: "")
        addItem(withTitle: "Item 2", action: #selector(item2Clicked), keyEquivalent: "")
    }

    @objc func item1Clicked() {
        print("Item 1 clicked")
    }

    @objc func item2Clicked() {
        print("Item 2 clicked")
    }
}
  1. 将菜单设置为主菜单

可以在 AppDelegate 中通过向应用程序对象的 mainMenu 属性中添加新菜单来将菜单设置为主菜单。还可以使用 NSApplication.shared.setMainMenu(_: NSMenu) 方法来设置主菜单。

@main
struct MySwiftUIApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) {
        let myMenu = MyMenu()
        NSApplication.shared.mainMenu = myMenu
    }
}

请注意,在 macOS 应用中增加主菜单时,首先需要创建一个 AppDelegate 类,并将其指定为 @NSApplicationDelegateAdaptor 的代理,以确保应用程序知道要使用该类作为其代理。